【发布时间】:2013-01-16 12:27:05
【问题描述】:
我正在关注Import CSV Railscast,它是直截了当的。
问题在于它只处理一个 csv 文件,该文件仅包含 1 个文件中的 1 个模型中的信息。
假设我有一个 CSV 文件,我正尝试将其导入到我的 Listing 模型中。在每一行/列表中,它都有一个名为 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),那么它应该创建一个新的建筑记录。
想法?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 csv import