我在ProductsController #import中遇到错误ActiveRecord :: UnknownAttributeError,同时尝试导入大型csv文件。
完成迁移并创建表格。
当我尝试处理我得到的文件时,
产品的未知属性'CO_NO'。
提取的来源(第14行):
型号:
class Product < ActiveRecord::Base
attr_accessor :co_no, :parcel_id, :file_t, :asmt_yr
require 'csv'
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
product_hash = row.to_hash # exclude the price field
product = Product.where(id: product_hash["id"])
if product.count == 1
product.first.update_attributes(product_hash)
else
Product.create!(product_hash)
end # end if !product.nil?
end # end CSV.foreach
end # end self.import(file)
end # end class
控制器:
classProductsController<ApplicationController
def index
@products=Product.all
end
def import
Product.import(params[:file])
redirect_toroot_url,notice:"Productsimported."
end
end
csv header:
co_no,parcel_id,file_t,asmnt_yr,bas_strt plus many more
27,"0000009500001010","R",2014
irb输出:
Product.all
NameError: uninitialized constant Product
from (irb):2
from /Users/david/.rvm/rubies/ruby-2.1.3/bin/irb:11:in `<main>'
答案 0 :(得分:0)
只是预感而不试用代码,但是显示的错误消息......
unknown attribute 'CO_NO' for Product.
表示输入属性为“CO_NO”,但您已声明“co_no”。由于Ruby对变量名称区分大小写,因此可能无法找到属性“CO_NO”(而不是“co_no”)。
答案 1 :(得分:0)
通过在cvs标题周围添加引号,我能够通过错误。
&#34; CO_NO&#34;&#34; parcel_id&#34;&#34; file_t&#34;&#34; asmnt_yr&#34;&#34; bas_strt&#34;
另外,我发现从Rails 3到Rails 4,attr_accessor现在在控制器中处理。经过这两次调整后,数据导入正确