Gemインストールの環境指定と初期データ(seeds.rb)の作り方
gemのインストール環境指定
developmentとtestどちらの環境にもインストールとあったが、どこに書けば良いか分からなかったため、gemfile内の記載の意味について少し調べた。
開発環境、テスト環境、本番環境、どの環境において必要なGemなのか。例えば、後述するダミーデータ作成のためのFakerは本番環境では使わないものであり、インストールするなら開発環境とテスト環境のみで事足りる。
seeds.rbに記述
Fakerを用いてダミーのデータを作成。
どのダミーデータを用いるかはGitHubを確認。ポケモンやワンピースなど色々あった😳
例)usersテーブルに10件のダミーデータを追加する
10.times do name = Faker::Name.name email = Faker::Internet.email password = "password" password_confirmation = "password" User.create!(name: name, email: email, password: password, password_confirmation: password) end 10.times do title = Faker::Coffee.origin body = Faker::Faker::Dessert.variety user = User.offset(rand(User.count)).first Post.create!(title: title, body: body, user: user) end
変数に代入してからオブジェクトを使って作成しても良いが、いきなりtitle: Faker::Coffee.origin
のような書き方をしても作成できた。後者の方が記述量が少ないのでいいと思う。
user = User.offset(rand(User.count)).firstとは?
offsetメソッド
テーブルからデータを取得する際、どのデータから取得するか(取得開始位置)を指定できるメソッド
先頭は0から始まるため(インデックス番号)、もし3レコード目から取得したい場合は下記のように記述。
モデル名.offset(2)
randメソッド
擬似乱数を生成してくれるメソッド。
irb(main):001:0> rand(5) # 0以上5未満の整数を返す => 2
指定した範囲の中からランダムな値を返す。
user = User.offset(rand(User.count)).first
①ユーザーの数が10人であれば、その中からランダムな値がrandの返り値として得られる
②得られたランダムな値と同じインデックス番号のレコードからずらっとデータを取得する
③取得したデータの一番上.first
で取得
参考にしたサイト
【Rails】忘れがちなGemfileの書き方を総復習 - AUTOVICE
Fakerを使ってみました!(使い方と実行例) - Qiita