Posted at

Rails・seedファイルを分割して管理する

More than 1 year has passed since last update.

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'


なんてことでもいいと思います。

もっといい方法があれば、教えて欲しいです。