seedデータ作成スクリプトを複数ファイルに分割する

こんにちは!kossyです!




今回はRailsにおいてseedデータ作成スクリプトを複数ファイルに分割する方法について、ブログに残してみたいと思います。



環境

Ruby 2.6.6
Rails 6.0.3.7
MacOS catalina



方法

seeds.rbに以下のスクリプトを追加します。

# db/seeds.rb

# テーブル名を複数形で記載する
table_names = [
  'admins',
  'users',
  'articles',
  'comments'
]

table_names.each do |table_name|
  path = Rails.root.join("db/seeds", Rails.env, table_name + ".rb")
  if File.exist?(path)
    puts "Creating #{table_name}..."
    require path
  end
end

あとは環境ごとにディレクトリを作成して、データ生成スクリプトを記述したファイルを作成するだけです。

db/seeds/development/users.rb

User.create!(name: 'hoge', email: 'fuga@example.com', password: 'password')
db/seeds/development/articles.rb

Article.create!(title: 'hoge', body: 'blah, blah, blah...', user: User.first)

スクリプトの準備ができれば、

$ bundle exec rails db:seed

を実行すればOKです!