seeds.rbでCSV入力するサンプルで、
以下の記述をよく見る。
seeds.rb
CSV.foreach('db/initFoods.csv') do |food|
Food.create(
:name => food[0],
:calories => food[1],
:protein => food[2],
:totalFat => food[3])
end
これだと、後からFoodの途中に属性を追加するのが辛い。
例えば、頭にcategoryを追加するには、
以下のようにいちいちインデックスの書き換えが必要になる。
seeds.rb
CSV.foreach('db/initFoods.csv') do |food|
Food.create(
:category => food[0],
:name => food[1],
:calories => food[2],
:protein => food[3],
:totalFat => food[4])
end
モデル側にCSVから取得したい属性を返すメソッドを追加して、
1レコードごとにhash化してからcreateした方が、
良さげ。
food.rb
class Food < ActiveRecord::Base
ATTRIBUTES = [
"category",
"name",
"calories",
"protein",
"totalFat"
]
def self.getAttributes()
return ATTRIBUTES;
end
seeds.rb
attributes = Food.getAttributes()
CSV.foreach('db/initFoods.csv') do |food|
hash = {}
for i in 0..attributes.length-1 do
hash.store(attributes[i], food[i])
end
Food.create(hash)
end
属性が多い場合、for文で回せるのも楽。