Railsでマスターデータの管理にCSVを使うときのseeds.rb
require 'csv'
Dir.glob('db/seeds/*.csv') do |file|
puts file
table_name = file.gsub(/^.*\/([\w\d_]+)\.csv/, '\1')
model_class = Module.const_get(table_name.classify)
models = CSV.read(file, headers: true).collect{|r| model_class.new(r.to_hash)}
update_columns = model_class.accessible_attributes.to_a.reject{|s| s.empty?}
model_class.record_timestamps = false if %w(created_at, updated_at).any?{|t| update_columns.include?(t)}
ActiveRecord::Base.clear_active_connections!
model_class.import models, on_duplicate_key_update: update_columns
end