LoginSignup
14
12

More than 1 year has passed since last update.

[Rails]seedファイル使い方

Posted at

今回はRailsで開発を行っていく中で、便利な機能seedファイルの使い方について解説していきます。

きっと便利に開発を進められるので、参考にしてみてください。

seedファイルとは

開発段階のデータ作成方法として、実際にcreate機能を実装してからアプリを操作してデータを作る方法やrails cからデータを作成する方法などがありますが、どちらも大量のデータを作ろうとすると正直めんどくさいです。。

そこで使われるのがseedファイルです。

seedファイルのメリットとして、

  • 開発段階で動作確認用に初期データを入れられる
  • データベースをリセットしても、seedファイルに入っている初期データは再び使える
  • 一度に大量のデータを作成できる

というメリットがありますので、開発するときに便利なので、知っておいて損のない機能となってます。

初期データとして管理者のデータも入れられるので、管理者が必須なアプリの場合は、使う場合が多いです。

初期データ作成

では、実際に初期データを作っていきます。

seedファイルはデフォルトで搭載されていて、dbディレクトリ直下seeds.rbにコードを記述していきます。

db/seeds.rb
# Postモデルのデータを作る
Post.create!(
  content: "てすとほげ",
  user_id: 1
)

これで、Postモデルのcontentカラムが「てすとほげ」、user_idが1のデータが作成できます。

記述できたらデータベースに反映させます。

$ rails db:seed

コマンド実行後、rails cで確認してみましょう。

$ rails c
001 > Post.all
:

作成したデータが確認できたら、反映できています。

複数のデータを作成

1つのデータを作成することができましたので、複数のデータを作りたいときはこの記述を何個も作っていったらいいのね、、、

db/seeds.rb
# Postモデルのデータを作る
Post.create!(
  content: "てすとほげ",
  user_id: 1
)
Post.create!(
  content: "てすとほげ2",
  user_id: 1
)
Post.create!(
  content: "てすとほげ3",
  user_id: 1
)

とてもDRYなコードとは言えないですよね

複数のデータを作りたいときは、timesメソッドを使うと一括でデータが作成できます。

db/seeds.rb
# 一括で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でデータが重複しないようにしておきます。

では、データベースを反映させて、rails cで確認してみてください。

$ rails db:seed
$ rails c
001 > User.all
:

データベースのリセット方法

今あるデータを削除して初期データを入れたいなど、データベースをリセットしたい場合の処理をお伝えしておきます。

データベースをリセットする場合は、以下のコマンドを実行します。

$ rails db:migrate:reset

これで、データベースがリセットされたので、seedファイルの初期データを投入していきます。

rails db:seed

これで、記述していた初期データが反映されました。

まとめ

seedファイルは、管理者や一括でデータを入れたい場合に非常に便利な機能です。

seedファイルをうまく使って、開発を進めていきましょう!

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12