导入CSV未初始化常量的未知属性Rails

时间:2015-04-26 17:46:42

标签: ruby-on-rails

我在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>'

2 个答案:

答案 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现在在控制器中处理。经过这两次调整后,数据导入正确