shimadama
1/3/2013 - 9:24 AM

Railsでマスターデータの管理にCSVを使うときのseeds.rb

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