Rails seedとは
はじめに
チーム開発中の初学者です🔰
開発段階のデータ作成方法では、実際にcreate機能を実装してからアプリを操作する方法やrails c
からデータを作成する方法などありますが、大量のデータを作るのは大変ですよね。
そこで役立ちそうなseedについて調べてみました!
初期データとして管理者のデータも入れられるので、管理者が必須なアプリの場合は、使う場合が多いらしいです。
seedとは
初期データやテストデータのことで動作確認用データを登録する目的で使われる。
dbフォルダ配下に存在している!(プロジェクト新規作成時に作成されている)
ここにDBへのデータ投入の処理を追記していって、railsコマンドを実行することでデータベースに初期データとしてデータが投入される🙆🏻
使用メリットはいくつかある!
- 開発段階で動作確認用に初期データを入れられる
- 複数のメンバーで開発している場合、同じデータセットで作業することができ、バグの発見やデバッグが容易になる
- 一度に大量に作成できる
- DBをリセットしてもseeds.rbにあるので使える
seedでデータベースに初期データを投入
- db/seeds.rbの編集
- rails db:seedの実行
書き方
ベーシックな書き方はこれ
# Userモデルのデータを作る
User.create!(
email: 'test@test.com',
name: 'テスト太郎',
image: File.open('./app/assets/images/test.jpg')
)
create!メソッドの末尾の!は、もし何らかの理由でオブジェクトの保存が失敗した場合に例外を発生させることを意味する。これにより、保存の失敗を即座に検知し、問題を解決することができる。
seedファイルを編集した後は、下記を忘れずに行い、DBに反映させる!
rails db:seed
たくさん作りたい場合
timesメソッドを使うと一括でデータが作成できる。
timesメソッドとは
Integerクラスのインスタンスメソッドで、指定された数だけブロック内の処理を繰り返すために使用される。メソッドの名前が示す通り、ある特定の「回数」(times)だけ処理を繰り返すという動作を行う。
# 一括で10個のユーザーデータを作成
# 10回繰り返し処理を行う
10.times do |n|
User.create!(
# n + 1で数字が重複しないようにする
email: "test#{n + 1}@test.com",
name: "テストユーザー#{n + 1}",
password: "testhoge"
)
end
これでUserが10個作成できる!
バリデーションでユニークを指定している場合はn + 1でデータが重複しないようにする!
seedファイルを編集した後は、下記を忘れずに行い、DBに反映させる!
rails db:seed
コマンド実行後、rails cで確認してみましょう。
$ rails c
001 > User.all
:
作成したデータが確認できたら反映できている🙆🏻♀️
faker
ダミーデータを作れるGemもあるみたいです。
README
参考にさせていただいたサイト
Discussion