format.csv以及如何在集合上调用类方法

时间:2013-07-12 05:25:32

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试使用默认的脚手架索引页面并添加生成csv文件的功能。 (我也是一个新手,所以请保持简单的答案:)

我在csv文件上关注此railscast:http://railscasts.com/episodes/362-exporting-csv-and-excel

最终我让它为我工作,但我对它的工作原理有点困惑:)

具体来说,当我传递一个集合时,我对如何调用类方法感到困惑。

示例代码创建Products的集合,然后调用format.csv。

在这种情况下,看起来类方法被调用一次;它不会在集合的每个成员上调用(这是我在传递集合时所期望的)。这意味着类方法实际上必须创建自己的集合(或者你必须修改控制器以传入一个。)

// in controller 
@products = Product.order(:name) # create a collection 
respond_to do |format|  
    format.html  
    format.csv { render text: @products.to_csv }  
end  

// in Product model  
def self.to_csv() 
end 

我发现以下代码更清晰,行为方式相同。

,而不是传递一个集合并且让魔术调用类方法Product.to_csv,而不是它
// change the controller
respond_to do |format|  
    format.html { @products = Product.order(:name)  } 
    format.csv { render text: Product.to_csv }  
end  

我想传入一个集合(和其他参数),所以我最后也修改了它。

// change the controller
format.csv { render text: Product.to_csv(Product.all) }  

// change the model class method
def self.to_csv(collection) 
end 

任何人都可以解决这个问题吗?我假设rails尝试在没有该方法的集合上调用#to_csv,然后它在集合中的对象上调用该方法,然后它调用类本身的方法,最终有效吗?我不明白那个流程......

感谢

0 个答案:

没有答案