传递主键以通过CSV上传创建操作

时间:2013-08-29 00:01:36

标签: ruby-on-rails activerecord csv

我正在尝试通过CSV批量上传。这是我的控制器的导入方法:

def import
        params.permit(:id, :brand, :product, :details)
        Item.import(params[:file])
        redirect_to root_url, notice: "Products imported."
    end

然后从我的Item模型中调用此self.import方法。

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

这是我的上传表单:

<%= form_tag import_item_mgmt_index_path, multipart: true do %>
  <%= file_field_tag :file %>
  <%= submit_tag "Import" %>
<% end %>

这是我的问题:当我检查数据库中的数据时,rails会分配一个自动递增item_id,而不是从我的CSV文件传递的item_id。我需要为我的应用程序分配这些特定的ID,我不知道为什么我不能在创建时分配它们。看着params,我甚至看不到我的item_id过去了。救命?提前谢谢。

项目模型

class Item < ActiveRecord::Base

has_many    :inventory_items
has_many    :vendors, through: :inventory_items
has_many  :list_items
has_many  :shopping_lists, through: :list_items

searchable do
text :brand, :stored => true
text :details, :stored => true
text :product, :stored => true
integer :id, :references, :stored => true
end
end

1 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但我认为这可行。

首先,您必须根据此thread调整表格结构以自动增加

create_table(:table_name, :id => false) do |t|
  t.integer :id, :options => 'PRIMARY KEY'
end

如果这不能自行运行,请将以下行添加到模型中。

set_primary_key :id