Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:未初始化常量';产品:CSV';_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails:未初始化常量';产品:CSV';

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类,它引发了一个
未初始化的常量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 资源

我遇到了一个类似的错误,有一段时间,我可以在CSV上毫无问题地使用类方法。然后,突然间,我得到了未初始化的常量错误。我意识到许多Ruby gem使用
multi_xml
或类似于依赖项gem的东西,并且作为gem在服务器启动时初始化CSV类的副作用。如果您删除了需要此功能的gem,那么无论您在哪里依赖此副作用,您都将开始获得异常。您可以通过在每个文件中写入
require'csv'
来修补它,但是使用
多xml
gem或类似的东西可能是解决问题的最简单的方法。

它是
::csv
,而不是
::csv
require 'csv'