Railsでアソシエーションのある複数のデータをseedで流し込む

通常、seedファイルでは関連付けのあるデータは流し込みができません。
そこで、Seed-FuというGemを使ってアソシエーションに対応したseedファイルを作ります。

下記の例ではUserに関連付けされたPostモデルにデータを追加していきます

手順

  1. Gemインストール
  2. ディレクトリ作成
  3. seedファイル作成
  4. 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}
....

おわり🏆

公開日