Import CSV Railscastに従っていますが、簡単です。
問題は、1 つのファイルに 1 つのモデルの情報のみを含む csv ファイルのみを処理することです。
Listing
たとえば、モデルにインポートしようとしている CSV ファイルがあるとします。各行/リストにはBuilding
、値が実際にはそのリストの建物属性の名前 (つまり@listing.building.name
) であるという列があります。
インポートでこれらのケースをどのように処理しますか?
これは、Ryan が Railscast に入れるクローゼットでProduct
、彼のケースのモデルにあります。
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
product = find_by_id(row["id"]) || new
product.attributes = row.to_hash.slice(*accessible_attributes)
product.save!
end
end
起こっていることは、製品が存在するかどうかを確認し、存在する場合は属性を更新することだけです。そうでない場合は、新しいものを作成します。
この場合の関連付けの処理方法がよくわかりません...特に、関連付けられたレコードが存在しない場合に必要なことを考えると、このプロセス中に作成する必要があります。
前の例に戻ると、building.name
がない場合はBuilding.find_by_name(name)
、新しい建物レコードを作成する必要があります。
考え?