Railsのdb:seedでcsvからデータをimportするやつ
を書いた。(db/seeds.rb)
あとはテーブル名.csvみたいなCSVファイルをseeds_dirに置けばrake db:seedでimportできる、というメモ。
seeds_dir = "#{Rails.root}/db/seeds/#{Rails.env}" csv_files = Dir.entries(seeds_dir).select {|f| f =~ /\.csv$/ } csv_files.each do |csv_file| p "#{csv_file} from csv" model_name = File.basename(csv_file, '.csv') model = model_name.classify.constantize path = "#{seeds_dir}/#{csv_file}" csv = CSV.read(path, headers: true, converters: :numeric) ActiveRecord::Base.transaction do csv.each do |row| # idが重複するレコードがある場合はupdate if row.has_key?('id') record = model.where(id: row['id']).first if record.present? record.update(row.to_hash) next end end model.create(row.to_hash) end end end