2016-03-07 63 views
0

我想导出数据到CSV文件。我这个代码导轨4导出为CSV:未定义的方法`属性'

@products = Product.all 

    respond_to do |format| 
     format.csv { render text: @products.to_csv } 
    end 

,并在我的模型

def self.to_csv(options = {}) 
    CSV.generate(options) do |csv| 
     csv << column_names 
     all.each do |product| 
     csv << self.attributes.values_at(*column_names) 
     end 
    end 
    end 

这是行不通的。我得到这个错误

NoMethodError in ProductsController#index 
undefined method `attributes' for #<Class:0x000000047e91c8> 

我在Rails 4和红宝石2.2。我怎样才能解决这个问题?

+2

尝试'product.attributes.values_at(* column_names)'而不是'self.attributes.values_at(* column_names)' – Pavan

回答

1

NoMethodError中的ProductsController#指数未定义的方法 '属性类:0x000000047e91c8

就像我说的,你应该使用product.attributes.values_at(*column_names)代替self.attributes.values_at(*column_names)

def self.to_csv(options = {}) 
    CSV.generate(options) do |csv| 
     csv << column_names 
     all.each do |product| 
     csv << product.attributes.values_at(*column_names) 
     end 
    end 
end 

Source

+0

它工作正常,但它为什么不能与self.attributes一起工作....它曾经当项目进入轨道3时工作 – asdfkjasdfjk

0

你在一个类的方法(def self.to_csv)你的模型。在此方法内,self是类别Product不是产品实例。但是你想访问产品实例的属性。您通过all产品对象进行迭代。因此,您需要访问当前产品对象,该对象每次迭代都会提供给您(|product|)。所以请尝试product.attributes而不是self.attributes

相关问题