使用CSV导入更新rails数据库记录

时间:2013-09-13 02:13:27

标签: ruby-on-rails activerecord csv

我有以下控制器方法:

class InventoryItemsController < ApplicationController

    def import
        params.permit(:code, :vendor_id, :price)
        InventoryItem.import(params[:file])
        redirect_to admin_index_path, notice: "Inventory Imported."
    end
end

然后调用我的模型方法:

class InventoryItem < ActiveRecord::Base

    def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
        InventoryItem.create! row.to_hash
    end
  end
end

我现在想要做的是使用类似的CSV导入方法来更新现有记录(价格变化等),只有:code属性是唯一的才能添加新记录。如果它是一条记录的简单更新,我可能会这样做,但我不知道如何通过CSV上传解决这个问题。请帮忙?提前谢谢!

1 个答案:

答案 0 :(得分:1)

这个答案可能会帮到你:create_or_update method in rails

尝试使用find_or_initialize_by_code之类的内容。您的代码看起来像

def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
    my_object = InventoryItem.find_or_initialize_by_code(code)
    my_object.update_attributes(row.to_hash)
end