Rails CSV导入文件的头部不在模型中

时间:2015-10-24 14:31:43

标签: ruby-on-rails ruby csv import

让我们假设一个模型具有以下标题(ID,Name),但其中一个具有带有其他标题的CSV文件,例如但不限于(ID,名称,价格,位置)。如何更改Model.rb文件以跳过不存在的标题?

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

1 个答案:

答案 0 :(得分:0)

以下代码将创建新产品或编辑现有产品。您可以在find_or_create_by块中添加所需的属性。

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    self.find_or_create_by(id: row["id"]) do |product|
      product.name = row["name"]
    end  
  end
end

如果你只需要id和名字,你可以在rails 4中做这样的事情。

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    self.where(:id => row["id"], :name => row["name"]).first_or_create
  end
end