我正在尝试通过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
答案 0 :(得分:0)
我不是百分百肯定,但我认为这可行。
首先,您必须根据此thread调整表格结构以自动增加
create_table(:table_name, :id => false) do |t|
t.integer :id, :options => 'PRIMARY KEY'
end
如果这不能自行运行,请将以下行添加到模型中。
set_primary_key :id