Railsで初期データを入れるのにはseedを使いますが、モデルが多くなってくるとseedの管理もモデル毎にしたいなと思い調べたので、自分がした方法を紹介します。
もっといい方法があれば、教えていただきたいです。
すること
・seedを複数に分割する。
・seedを指定して実行できるようにする。
・seedを一括で実行する。
手順
rakeタスクの作成
lib/tasks/seed.rakeを作成します。
*こちらのサイトを参考にさせていただきました
seed.rake
Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
desc "Load the seed data from db/seeds/#{File.basename(file)}."
task "db:seed:#{File.basename(file).gsub(/\..+$/, '')}" => :environment do
load(file)
end
end
seedファイルの作成
db/seedsというディレクトリを作成し、その下に行いたいモデル毎のseedファイルを作成します。
例えばUserに関してはuser.rbなど。
db/seeds/user.rb
user.rb
User.create(name: "テスト")
これでおっけーです。
実行方法
以下のコマンドを入力してください
bundle exec rake db:seed:user
これでモデル毎にファイルを実行することができます!
全ファイルを一括で実行
rakeタスクファイルを作成して全ファイルを実行するという手もありですが、
普通にdb/seeds.rbファイルに
seeds.rb
require './db/seeds/実行したいseedファイル名.rb'
なんてことでもいいと思います。
もっといい方法があれば、教えて欲しいです。