🙌
Rails CSVからインポートするコードを書いた
◆ ファイル
./exe.rb
./csvs/account.csv
./csvs/user.csv
◆ exe.rb
csv_import = ->(klass, &block) do
singular_name = klass.model_name.singular
logical_to_physical = klass.column_names.index_with { |attr| klass.human_attribute_name(attr) }.invert
CSV.foreach("#{__dir__}/csvs/#{singular_name}.csv", headers: true) do |row|
attributes = {}
row.each do |key, value|
physical_key = logical_to_physical[key]
attributes[physical_key] = block.nil? ? value : block.call(physical_key, value)
end
klass.create!(attributes)
end
end
# 担当者
csv_import.call(Account)
# 会員
csv_import.call(User) do |physical_key, value|
case physical_key
when 'status' # enumerizeジェム対応
User.send(physical_key).values.find { |val| val.text == value }
else
value
end
end
◆ account.csv
名前,自己紹介
田中,よろしく!
佐藤,...
上田,こんにちは!
◆ user.csv
名前,ステータス
田中,出席
佐藤,欠席
上田,早退
Discussion