通常、seedファイルでは関連付けのあるデータは流し込みができません。
そこで、Seed-FuというGemを使ってアソシエーションに対応したseedファイルを作ります。
下記の例ではUserに関連付けされたPostモデルにデータを追加していきます
手順
- Gemインストール
- ディレクトリ作成
- seedファイル作成
- seed実行
Gemインストール
Gemfile
gem 'seed-fu'
bundle installしましょう。
ディレクトリ作成
dbディレクトリ配下にfixturesを作成します。複数形です。
$ mkdir db/fixtures
さらに下層にdevelopmentやproductionなどの環境別ディレクトリを作っておけば、seed-fuが勝手に忖度してくれて便利です。
seedファイル作成
fixturesディレクトリ配下にposts.rbを作成します。
$ touch db/fixtures/posts.rb
timesを使って、50件ほどデータを作ってもらいます。slugは乱数発生モジュールを利用して生成しました。
posts.rb
require 'securerandom'
50.times do
Post.seed do |s|
s.title = "ここにタイトルが入ります"
s.body = "本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文"
s.slug = SecureRandom.urlsafe_base64
s.user_id = 2
end
end
user_idに関連付けUserのidを入れます。
seed実行
db:seedの代わりにdb:seed_fuを実行します。seed-fuではありませんよ〜
rails db:seed_fu
== Seed from /app/db/fixtures/posts.rb
- Post {:title=>"ここにタイトルが入ります", :body=>"本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文", :slug=>"rITDEcO04_Kw4K3mQZX49w", :user_id=>2}
....
おわり🏆