Rails Diary

プログラミングの学習記録です。

Gemインストールの環境指定と初期データ(seeds.rb)の作り方

gemのインストール環境指定

developmentとtestどちらの環境にもインストールとあったが、どこに書けば良いか分からなかったため、gemfile内の記載の意味について少し調べた。

開発環境、テスト環境、本番環境、どの環境において必要なGemなのか。例えば、後述するダミーデータ作成のためのFakerは本番環境では使わないものであり、インストールするなら開発環境とテスト環境のみで事足りる。

gist.github.com

seeds.rbに記述

GitHub - faker-ruby/faker: A library for generating fake data such as names, addresses, and phone numbers.

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で取得

参考にしたサイト

Gemfileの意味をメモ · GitHub

GitHub - faker-ruby/faker: A library for generating fake data such as names, addresses, and phone numbers.

【Rails】忘れがちなGemfileの書き方を総復習 - AUTOVICE

Fakerを使ってみました!(使い方と実行例) - Qiita

railsのseedの書き方いろいろ - Qiita

【Ruby】 randメソッドの使い方を学んでランダムなデータを作成しよう | Pikawaka

【Rails】offsetメソッドで取得するデータの範囲を指定する方法を解説 | CODE MARINE