【rails】 seedデータ投入時に、csvをimportしてよしなにする
seed_data投入をいい感じにやりたかったので、メモ seeds.rbに全部入れるのは見通しが悪くなるのでやめたい。
やりたいこと
- csvファイルに、seed_data用のファイルを定義
- そのファイルを読み込んでseed_dataとして投入
bundle exec rails db:seed
で実行される
やったこと
├── migrate ├── schema.rb ├── seeds │ ├── csv │ └── script └── seeds.rb
- seeds.rb をseed配下のスクリプトを実行するように変更
- ソートはファイル名で
- データ投入の順序を制御したくなると思うので
01_user.rb
みたいして、それで制御する
require "csv" Dir[File.join(Rails.root, 'db', 'seeds', 'script', '*.rb')].sort.each do |seed| load seed end
スクリプトを定義
db/seeds/script/01_user.rb
CSV.foreach('db/seeds/csv/01_user.csv', headers: true) do |row| Room.create!( name: row['name'] ) end
データを定義
db/seeds/csv/01_user.csv
name emono
これで bundle exec rails db:seed
をするとデータが投入される