0

次のコントローラーメソッドがあります。

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属性が一意である場合にのみ新しいレコードを追加することです。1 つのレコードの単純な更新であれば、おそらくこれを行うことができますが、CSV アップロードでこれに取り組む方法がわかりません。助けてください?前もって感謝します!

4

1 に答える 1

1

この答えはあなたを助けるかもしれません:レールのcreate_or_updateメソッド

で以下のようなものを使用してみてください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
于 2013-09-13T02:38:48.617 に答える