0

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

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

最终我让它为我工作,但我对它为什么工作有点困惑:)

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

示例代码创建一个产品集合,然后调用 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,然后它在集合中的一个对象上调用该方法,然后它在最终有效的类本身上调用该方法?没看懂这个流...

谢谢

4

0 回答 0