4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

seeds.rb- 使い方-

Posted at

##seeds.rbとは

Webアプリの初期データを作ってくれるファイル

この中にテストデータを記述しておくことで、
Webアプリの__動作確認__や__レイアウト修正必要箇所の発見__などができるようになります。

##書き方

####1つずつテストデータを書いていく場合

seeds.rb

#1つずつテストデータを追加する場合
Product.create!(
    name: "チーズ入りクッキー(6枚入り)",
    description: "チーズクッキーは生地となるラングドシャだけでなく、間にサンドしたホワイトチョコにもチーズが入っています。ダイレクトにチーズの美味しさを感じられるのでチーズ好きにはたまらないクッキーです",
    ex_price: "700",
    image: File.open("./app/assets/images/demo_product_image/クッキー.jpg")
  )

`モデル名.create!`から始まり、 `カラム名: "値" `を必要数書くことでテストデータが作成できるようになります。

※画像データは
カラム名: File.open("ファイルの保存場所/ファイル名")で登録可能です。

今回はapp/assetsにimagesディレクトリを作成し、
さらにその中に、demo_product_imageディレクトリを作成。
その中にファイルを保存していた為、このような書き方になっています。

####大量のテストデータを入れたい場合

例えば、100個のテストデータを作りたいときはどうしましょう。

上記方法で100個書いてもいいですが、時間がもったいないですよね。
そのようなときは、__繰り返し処理__でデモデータを作ることができます!

seeds.rb
100.times do |n|
  User.create!(
    name: "test#{n + 1}人目", 
    content: "test#{n + 1}回目",
    email: "test{n + 1}@test.com",
    password: "password"
)
end

この記述では、 0~100までの値をブロック変数 __n__ に代入してテストデータを作ります。

テスト1人目
テスト2人目
テスト3人目
テスト4人目
 ・
 ・
 ・
と100回繰り返し処理を行い、データを作ることができます。

##seeds.rbの反映

seeds.rbを書いただけではテストデータは登録されません。

ターミナル.
rails db:seed

このコマンドでseeds.rbを読み込みます。


※注意
テストデータの読み込みをリセットするコマンド

ターミナル.
bin/rails db:migrate:reset


seeds.rbを読み込んで実装中、途中からテストデータを増やしたとします。
再度rails db:seedで読み込むとエラーになります。(重複するデータが出てきてしまう)

そのため、途中でテストデータを増やした際には、上記コマンドで一度テストデータの読み込みをリセットしてから再読み込みを行ってください。

##おまけ

####create と create!

どちらでもテストデータの作成を行うことはできます。

しかし、createではバリデーション通りに作らなかった時にテストデータを作ることができません。

様々なカラムにバリデーションを定義していることも想定して、create!を使った方が楽だと思われます。


####それっぽいテストデータを作ってくれるGem

テストデータがtest1、test2、test3では味気ないという方へ

1:fakerというGemを読み込む

Gemfile.
gem 'faker'
ターミナル.
bundle install

ついつい忘れがち(Gem読み込み)

2:seeds.rbにfakerを使ってテストデータを書く

seeds.rb
100.times do |n|
  name = Faker::Name.name
  content = "test"
  email = Faker::Internet.email
  password = "password"

  User.create(
    name: name,
    content: content,
    email: email
  )
end

3:seeds.rbの読み込み

ターミナル.
rails db:seed

これでそれっぽい名前とアドレスのテストデータができます。

fakerをより詳しく知りたい方はこちらを参考にしてください!
公式リファレンス

##さいごに

文字の長さなどによってレイアウトの調整もしやすくなるので、文字の長さを変えたテストデータを複数作ってみても良いかもしれません。

誤字、脱字、知識の誤り等ありましたら、教えていただけると幸いです。

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?