[英]Rails: Uninitialized constant 'Product::CSV'
我有以下Product类,它引发了一个uninitialized constant 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
您需要CSV库。
require 'csv'
class Product < ActiveRecord::Base
# ...
end
我今天也犯了同样的错误。 对于那些有同样问题的人,我想分享一下。
请确保在config / application.rb中 需要csv库。
require 'csv'
我遇到了类似的错误,有一段时间,我可以在CSV上使用类方法没有问题。 然后,突然间,我得到了未初始化的不断错误。 我意识到许多Ruby宝石使用multi_xml
或类似的东西作为依赖gem,并且作为一个副作用,gem会在服务器启动时初始化CSV类。 如果你删除了需要这个的宝石,你将开始在你依赖这个副作用的地方获得例外。 您可以通过在每个文件中multi_xml
require 'csv'
来修补它,但使用multi_xml
gem或类似的东西可能是解决您问题的最简单方法。
当您在命名空间下引用常量时,比如Class或Module,默认情况下Ruby认为此常量名称在命名空间下。
在您的情况下,当您在Product
类中提及CSV
时,Ruby将查找Product::CSV
常量。 这是理想的行动。
当然,您不希望这样,因为您的CSV
模块位于顶级命名空间。 在这种情况下,您必须通过在名称前添加::
来明确表达。
::CSV.foreach #.....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.