Ruby on rails Rails:未初始化常量';产品:CSV';
我有下面的Product类,它引发了一个Ruby on rails Rails:未初始化常量';产品:CSV';,ruby-on-rails,Ruby On Rails,我有下面的Product类,它引发了一个未初始化的常量Product::CSV异常 class Product < ActiveRecord::Base has_attached_file :photo, :styles => { :small => "150*150>" } def self.import(file) CSV.foreach(file.path, headers: true) do |row| product = f
未初始化的常量Product::CSV
异常
class Product < ActiveRecord::Base
has_attached_file :photo, :styles => { :small => "150*150>" }
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
product = find_by_id(row["id"]) || new
product.attributes = row.to_hash.slice(*accessible_attributes)
product.save!
end
end
end
类产品{:small=>“150*150>”}
def self.import(文件)
CSV.foreach(file.path,headers:true)do | row |
product=find_by_id(第[“id”行])|新
product.attributes=行到散列切片(*可访问的属性)
产品。保存!
结束
结束
结束
您需要CSV库
require 'csv'
class Product < ActiveRecord::Base
# ...
end
需要“csv”
类产品
当您引用命名空间下的常量时,比如说Class或Module,默认情况下,Ruby会认为该常量名称位于命名空间下
在您的例子中,当您在Product
类中提到CSV
时,Ruby将查找Product::CSV
常量。这是我们想要的行动
当然,您不希望这样,因为您的CSV
模块位于名称空间的顶部。在这种情况下,您必须通过在名称之前添加:
来明确表示这一点
::CSV.foreach #.....
我今天也犯了同样的错误。对于那些有同样问题的人,我想分享一下 请确保您需要config/application.rb中的csv库 config/application.rb 资源
multi_xml
或类似于依赖项gem的东西,并且作为gem在服务器启动时初始化CSV类的副作用。如果您删除了需要此功能的gem,那么无论您在哪里依赖此副作用,您都将开始获得异常。您可以通过在每个文件中写入require'csv'
来修补它,但是使用多xml
gem或类似的东西可能是解决问题的最简单的方法。它是::csv
,而不是::csv
。
require 'csv'