繁体   English   中英

Rails:未初始化的常量'Product :: CSV'

[英]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库。

配置/ application.rb中

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM