効率的なseedの書き方
seeds.rb
Railsで初期データを格納する場合、あらかじめseeds.rbでデータをcreateしておくという手法が一般的だと思われます。
ただ、モデルが増えていくと自ずと投入したいデータは肥大化していき、seedで管理するのが面倒になりませんか??
管理の方法
ある種思想の話になりますが、私はdevelop/test/productionでそれぞれseedデータは分けるべきだと考えています。
従って下記のようにseedを管理しています。
格納フォルダ作成
$ mkdir -p db/seeds/development
$ mkdir -p db/seeds/test
$ mkdir -p db/seeds/production
seedデータを格納するseedsフォルダを作成しました。
さらに実行環境毎にフォルダを分けています。
データを投入
$ touch db/seeds/development/users.rb
$ touch db/seeds/test/users.rb
$ touch db/seeds/production/users.rb
User.create!(
email: test@example.com
password: password
name: nara
)
各フォルダにデータ投入用のファイルを作成します。
また、必要なファイルに初期データを投入します。
seed.rbで環境毎に読み込むフォルダを変更
tables = %w(users) #読み込むseedデータのファイル名
tables.each do |table|
path = Rails.root.join("db", "seeds", Rails.env, "{table}.rb" #環境毎のpathの指定
if File.exist?(path)
puts "Creating #{table}..."
require(path)
end
end
tablesという変数に配列で読み込むファイル名を指定します。(複数ある場合でも、付け加えていけば大丈夫です。)
そして、それらをeachで回した上で、環境毎にpathを発行し読み込むseedの分岐を行なってあげます。
これにより、環境毎に読み込む先のフォルダを変更でき、かつseed.rbに全ての初期データを書く必要がなくなるため肥大化を抑えつつ効率よく初期データを作成することが可能になります。
まとめ
seedは肥大化するとイライラの原因になるのでできるだけ避けましょう。
Author And Source
この問題について(効率的なseedの書き方), 我々は、より多くの情報をここで見つけました https://qiita.com/besmero628/items/e66fcb31863c983e9b8a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .