Rails関連のことを調べてみた2022年10月23日

Rails関連のことを調べてみた2022年10月23日
目次

重複のバリデーションエラーを回避するFactoryBotの書き方

# 目的
Userモデルにてemailの一意性をバリデーションとして設定している場合、下記のテストコードではエラーが発生する。
“`ruby
FactoryBot.define do
factory :user do
user_name { “tester” }
email { “tester@example.com” }
password { “password” }
end
end
“`
“`ruby
it “複数のユーザー登録” do
user1 = FactoryBot.create(:user)
user2 = FactoryBot.create(:user)
end
“`
エラーが発生しないように複数のテストユーザーを作成する。
# 実装方法
“`ruby
FactoryBot.define do
factory :user do
user_name { “tester” }
#シーケンスを利用する
sequence(:email) { |n| “tester#{n}@example.co

元記事を表示

エラー対応:Migration Nameにて「NO FILE」

# エラー内容
modelを実装中、DBに不手際を確認。
該当ファイルを削除した結果、Migration Nameにて「NO FILE」のエラーを確認。
「rails db:rollback」を実施していないため、エラーが発生。
# 修正対応
– migrationの状態を確認
“`ruby
rails db:migrate:status
“`
– 下記のmigrationを確認
“`ruby
Status Migration ID Migration Name
————————————————–
up 20210726110200 Sorcery core
up 20210726111347 Add columns to users
up 20210804115220 Create boards
up 20210804120214 Add user id to boards
up 20210811081624 Add img

元記事を表示

gretelを使ってパンくずリストを作成

# 目的
scaffoldアプリにてgretelを使ってパンくずリストを作成する。
最低限の内容を学習するため表示させるのはuser_newとuser_showのみにします。
# 新規の技術・機能の概要
## gretelの概要 ##
パンくずリストを作成するgem
![edit_パンくず](https://storage.googleapis.com/zenn-user-upload/bfc1d2ce13dae18ea22395b7.png)
webサイトの上部などにあるサイトページの位置等を示すリストがパンくずリストです。
gretelの設定ファイルは下記の通り
“`ruby
crumb “ページ名” do
link “ビューに表示される名前”, “リンクされるURL”
parent :親のページ名(現在の前のページ)
end
“`
表示させるコードは下記
“`ruby
<%= breadcrumbs separator: "区切り文字" %>
“`
## 執筆時のバージョン ##
Rails:5.2.6
gretel:4.3.0
# 実装方法
## 新規アプリを作

元記事を表示

Rake + Wheneverでブログのステータスを自動的に変更するアプリを作成

# 目的
シンプルなブログアプリに記事のステータスをcronタスクにて自動的に変更する機能を実装する。
# 新規の技術・機能の概要
**Rake**
Rubyで記述されたビルドツール
**Whenever**
railsにてcronタスクを簡単に設定するgem
**執筆時の対象Version**
Rails:5.2.6
Whenever:1.0.0
# 実装方法
## セットアップ ##
“`terminal:terminal
# アプリの新規作成
rails new blog_sample
cd blog_sample
“`
“`terminal:terminal
# scaffoldにてBlogモデルを生成
rails g scaffold Blog title:string content:text
“`
“`diff ruby:db/migrate/*******_create_blogs.rb
class CreateBlogs < ActiveRecord::Migration[5.2] def change create_table :blogs d

元記事を表示

pundit でシンプルな認可機能アプリを作成

# 目的
PunditはRailsにおいて認可システムに必要なヘルパーなどを提供するgemです。
punditよりシンプルな認可機能アプリを作成します
> **Qiita:Pundit + Railsで認可の仕組みをシンプルに作るより引用**
> Punditというgemを使ってRailsに認可の仕組みを作ってみます。
> 認可というとcancancanが有名です。
> cancancanはユーザに対して、どんなアクションが許可するかを定義するのに対して、
> Punditではリソースに対して誰が許可されるのかを定義します。反対からの目線ですね。
> cancancanがコントローラ寄りならば、Punditはモデル寄りの責務です。また、
> cancancanがDSLなのに対し、PunditはピュアRubyな書き方になっています。

**学習アプリに実装する機能**
管理ユーザーのみユーザー詳細(user_show)閲覧可能。
管理ユーザー以外の場合はエラーページを表示(403)。

**執筆時の対象Version**
Rails:5.2.6
devise:4.8
pundit:2.

元記事を表示

[Rails][shebang] bin/rails : No such file or directory 解決法

# 問題

VM上のCentOS 環境からgit cloneした
Rails projectの `bin/rails` `bin/rake` などbinstabコマンドがうまく実行できない。

“`
$ bin/rails console
: No such file or directory
“`

->
bin/rails ファイル中身を 削って、見ると
そもそも1行もruby実行できていない

# 原因

shebang とよばれる1行目 の読み込みが悪いよう

一方で `rails c`
など 当のbinstab を使用しないと実行はできる:

“`
$ rails c
/home/vagrant/.rbenv/versions/2.7.6/bin/ruby: warning: shebang line ending with \r may cause problems
..
“`
( ->
改行コードが 悪いみたいなwarning が出ている..

## 解決法

全体的に改行コードが問題っぽいが、

とりあえず、
当binstab を以下でencod

元記事を表示

【未経験】ポートフォリオ開発記録 #01

# はじめに
はじめまして!
自分はweb系の自社開発企業への転職を目指しています。
これから転職活動を進めていくにあたってポートフォリオの開発をしていきます。
その際に、機能実装の流れや詰まったことなどを備忘録的な感じで記録していこうと思っています。

今回は、現在考えているサービスの簡単な概要と、使用技術についてまとめられたらと思います!

# サービス概要
早速ですがサービスの概要です。

現在アイデアとして考えているサービスは、音楽再生機能付きのポモドーロタイマーです。
開発しようと思った背景としては、自分はプログラミングの勉強にポモドーロタイマーを活用しているんですが、自分の好きな音楽とポモドーロタイマーを合わせようとすると、どうしても複数の操作が必要なってしまって地味に面倒でした。
この問題は僕の身の回りにも多いようでした。
これからwebエンジニアとしてやっていくなら勉強はずっとしていくと思いますので、ポートフォリオだけで終わらず長く使えるようなサービスにできればと思い考案しました。

イメージとしてはこんな感じです。

![キャプチャ.PNG](https://qii

元記事を表示

【個人開発】野球観戦をもっと楽しめるサービス、「野球バカ実況」をリリースします!

## まえがき
私は未経験のエンジニアで約一年間Railsを中心に勉強していました。野球観戦を楽しめるサービスを開発してみました。野球が好きな人は読んでくれれば嬉しいです。後半には難しかった技術についても述べています。技術が好きだという人も是非読んでいただければ嬉しいです!

# サービスURL
#### サービス名:「野球バカ実況」
###### 以下サービスURL
https://yakyubaka-jikkyo.com/

###### 以下Git Hub

https://github.com/GreatMuta514/baseball_app
## サービス概要
野球の試合を見ながらリアルタイムでチャットができます。
野球の試合の勝敗予想ができます。
野球ファンに試合観戦をより楽しんでもらえるサービスです!

**今日から日本シリーズが始まります!野球ファンの方は是非、試合を見ながら使ってみてください!**
## 使い方
### 試合前
試合前には、どんな試合になるかみんなで予想しましょう!
– 試合予想を投稿。
– みんなの予想をチェック。
– コメントで議論。
[![I

元記事を表示

長いコマンドをまとめることができるMakefileが便利

例えば、初めてRailsサーバーを起動するのに以下のコマンドが必要だとします。

“`bash
$ docker-compose run web yarn install –check-files
$ docker-compose run web rails db:create
$ docker-compose run web rails db:migrate
“`

これらを入力するのは面倒です。そこでMakefileが役立ちます。

Makefileはタスク名、コマンドで最低限OKです。コマンドの前にはTabを入れます。

“`makefile:Makefile
タスク名:
コマンド
“`

先程のRailsのコマンドを入れるとこのようになります。

“`makefile:Makefile
setup-rails:
docker-compose run web yarn install –check-files && \
docker-compose run web rails db:create && \
docker-compose run web

元記事を表示

adminのパスワードを忘れた話。

はじめに

今回は投稿サイト作成にあたって、gemのdeviseを使って
user側とadmin側を分けて作成しております。
ん?devise?user側とadmin側分けるってなに?って方は以下サイトをご参照あれ。
>https://nllllll.com/ruby-on-rails/rails-devise/
>https://www.sejuku.net/blog/13378

deviseを導入することで、簡単に認証機能を実装することができます。
つまりサインアップやサインインの実装が簡単にできてしまう便利なgemです!

今回user側からの実装を進めていき、ある程度終わりが見えたところで
「さ、admin側に行くか」と思ったんですが。。

admin側のログイン画面にいき、ふと立ち止まりました。
「あれ?一度サインアップしてる??したかな。いやでもしたかも」
おそらく作成時にちゃんとサインアップできるかテストしていたんだと予測。
しかしそのパスワードもなにもかも覚えていない。

adminのパスワードを再設定しよう

方法

ぼっち演算子(&.)

# ぼっち演算子とは
&.(Safe Navigation Operator)は、通称ぼっち演算子と呼ばれており
ぼっち演算子は、オブジェクトに対してとあるメソッドを呼び出した時、そのオブジェクトがnilでない場合は、実行結果を返します。一方で、nilの場合は、nilを返してくれます。
“`ruby:ぼっち演算子を使って、テキストの情報を取得する
# 変数@itemに情報が定義されている場合
[1] pry(main)> @item&.text
=> “アイテム”

# 変数@itemがnilの場合
[2] pry(main)> @item&.text
=> nil
“`

通常のオブジェクトメソッドという書き方では、オブジェクトがnilの場合はundefined methodのエラーになってしまいます。
ですがぼっち演算子を使う事によりif文を使わず簡潔化する事が出来ます
“`ruby:例
# if文を使用した場合
@item.tags.first.tag_name if @item.tags.first.present?
# ぼっち演算子を使用した場合
@item.tags&

[Chart.js]折れ線グラフの縦軸を反対にする方法

# はじめに
今回ポートフォリを制作するにあたってChart.jsを使用し折れ線グラフを表示させました。
その中で折れ線グラフの縦軸を反対にしました。
あまり需要がないのか、実際に記事にされているものが無かったため公式を調べ実装を行いました。
この知識が誰かの役に立てば幸いと思い記事を書かせてもらいます。

# 今回記述するグラフについて
### 修正前
“`js:line_graph.html.erb
document.addEventListener(‘turbolinks:load’, function() {
var ctx = document.getElementById(‘line_graph’);
var myChart = new Chart(ctx, {
type: ‘line’,
data: {
labels: [‘1回前’, ‘2回前’, ‘3回前’, ‘4回前’, ‘5回前’, ‘6回前’, ‘7回前’, ‘8回前’, ‘9回前’, ’10回前’],
datasets: [{

ActiveStorageを用いた画像投稿機能の実装

# はじめに
Rubyにおいて画像投稿機能を実装するために必要な流れを忘れないためにまとめます。

## 1. 画像投稿機能を実装するためには
rubyにおいて画像投稿を実装するために必要な流れは以下の通り。

ActiveStorageを用いて
– アップロードした画像専用のテーブルを作成する
– 投稿した画像を表示する
– 投稿した画像の大きさを調整する

## 2. ImageMagickをインストールする
% brew install imagemagick
ImageMagickとは
コマンドラインから画像に処理を加えることができるツール。
処理としては、画像の作成やサイズ変更、保存形式の変更などがある。
ImageMagickはGemではなく、ソフトウェア。
そのため、Homebrewからインストールする。
GemではないImageMagickをRubyやRailsで扱うには、MiniMagickというGemが必要となる。

## 3. MiniMagickとImageProcessingをイン

カテゴリー選択機能の実装(ActiveHash)

# はじめに
カテゴリー選択機能の実装の流れを残す

## カテゴリー選択を実装するためには
例えば、都道府県名一覧やカテゴリーなど「基本的に変更されないデータ」があったする。
「基本的に変更されないデータ」は、データベースに保存する必要性がない。
一方、ビューファイルなどにそれらのデータを直接書いてしまうと、可読性に欠ける。
そのようなケースでは、ActiveHashが有用。

## ActiveHashとは
都道府県名などの変更されないデータをモデルファイル内に直接記述することで、
データベースへ保存せずにデータを取り扱うことができるGem。
すなわち、Active_Hashを用いることで、モデルファイルに直接記述した変更されないデータに対して、ActiveRecordのようなメソッドを用いることができる。(例えば、allやcreateメソッドのことを指している。)

## ActiveHash導入の流れ
### 1. Gemの導入

# Gemfile内
#中略
gem ‘active_hash’

# タ

【Rails基礎】ややこしい部分テンプレートの省略形について簡単にまとめてみた

ソースコードを見ていると部分テンプレートをパーシャルするときに様々な省略形を目にするので、調べたところとてもわかりやすい記事を見つけたので、紹介します。

https://techtechmedia.com/partial-template-rails/

【Rails初心者】form_withの使い方を隅から隅まで解説

form_withについて調べていたら最高の記事に出会ったので、ストックするために紹介します。

https://ymiyashitablog.com/rails-form_with/

includesメソッドってなんだろな。

はじめに

先日、ユーザーがBookmarkした投稿の一覧を出したくてコードで悩んでいたら、
こんな書き方はどう?と教えてもらったのですが…

“`ruby
@posts = Post.includes(:user).where(user_id: current_user.id)
“`
このincludesってたまに見るけどよくわからないなーってことで
自分の勉強のために調べてまとめてみました。

includes攻略のためには「N+1問題」の理解が重要!

いや「N+1問題」ってなんだよって思いますよね。
ざっくり言ってしまうと「N+1問題」=超非効率な状態です。
マクドナルドに行ったらハンバーガーを最初に買ってきて、その次にナゲットを買ってきて、
その後にさらにポテトを買ってくるような状態で、「いやそれまとめて一緒に買えたよね?」みたいな。
こんなことをしているとSQLが過剰に動かされてしまい、ブラック企業状態です。
おかげで疲労困憊によりパフォーマンスが低下してしまいそうです。

(SQL=デー

[rails 初心者]同率順位を踏まえたランキング機能

初めに

ポートフォリオテーマとして業者のレビューサイトを作成しています。
以下の画像のようなレビューサイトを作っていこうと思います。

![top画面2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822721/a259bdd1-d312-4eb9-219e-ecbbd0526cec.png)

※自分用でまとめてますので、分かり辛かったらすいません。
また理解不足・誤りがあったらコメント頂けますと幸いです。m(__)m<ヨロシクオネガイシマス

前提条件

①今回の記事ではランキング機能のみ(※同率順位を踏まえた順位)についてまとめます
②レビュー機能や並び替え機能については、以下URLの記事に記載されている内容を参考にしてください

[[rails初心者]複数権限でのログインを使ったレビューサイトの作成(基本)](https://qiita.com/about10/items/0e376c84022f2ac238d0)
[[

コメント投稿、削除機能のajax化

# コメント投稿、削除機能のajax化
## 手順
①commentsコントローラーの修正
②コメント作成、削除機能をajax化
③コメント作成、削除時の動的レンダリング処理を追加

## 1. commentsコントローラーの修正
コメント作成時の redirect_back を削除し、コメント削除処理を追加します。

“`app/controllers/comments_controller.rb
class CommentsController < ApplicationController def create @comment = current_user.comments.build(comment_params) @comment.save end def destroy @comment = current_user.comments.find(params[:id]) @comment.destroy! end ``` コメント削除のルートを追加します。 ```config/routes.rb Rails.app

[rails 初心者]メソッド化についてまとめてみた

初めに

縁があり、通っているプログラミングスクールのメンター(質問対応者)さんから次のことを勧められました
`メソッド化に力を入れた方がいい`と。。。
ということで今回はそのメソッド化についての基本知識?考え方?を自分なりにまとめてみました!!

注意事項

※自分用でまとめてますので、分かり辛かったらすいません。
また理解不足・誤りがあったらコメントにてご指摘頂けますと幸いです。m(__)m<ヨロシクオネガイシマス

前提条件

①今回は`rails`を題材にして話を進めていきます。

②次の二つの知識についてある程度理解済みであること   ※私の場合は60%ぐらいでした・・・多分(;^ω^)
・「メソッド」について理解していること
・「オブジェクト指向」について理解していること
※もしここで不安な方がいましたら、以下のプルダウンのところを開いてリンク先を一読してみてください。

③`posts_conntroller`にて`@post = Post.find(