2012-07-22 43 views
0

我有這個在我的索引作用下控制器:類/對象預計

format.csv do 

    @coasters = Coaster.all 
    render text: @coasters.to_csv 

end 

但是當我運行它,我得到:未定義的方法`to_csv」的#我可以;看不到我要去的地方錯誤?

的to_csv方法是在這裏:

def self.to_csv 
    CSV.generate do |csv| 
     csv << column_names 
     all.each do |coaster| 
     csv << coaster.attributes.values_at(*column_names) 
     end 
    end 
    end 

有什麼想法?

+0

什麼是你想用raise語句呢? – ramblex 2012-07-22 10:27:44

回答

1

Coaster.all返回一個不是異常類的數組。所以,當你試着去養它,你會得到你所看到

錯誤
+0

對不起,我完全發佈了一段錯誤的代碼。我已經用我最初想問的問題更新了我的問題!對不起大家! – rctneil 2012-07-22 13:28:07

3
的關係(範圍) to_csv工作,

你的類的方法所以只寫@coasters = Coaster.scoped代替@coasters = Coaster.all

format.csv do 

    @coasters = Coaster.scoped 
    render text: @coasters.to_csv 

end 

說明:

您的方法to_csvself.一起聲明,因此這是類方法。這種方法只能在Coaster類來執行,而不是在對象的對象或數組:

Coaster.to_csv #good 
Coaster.find(1).to_csv #error - Coaster object: undefined method 'to_csv' 
Coaster.where('id>5').to_csv #good 
Coaster.where('id>5').all.to_csv #error - return array of objects 
Coaster.all.to_csv #error 

最後3行與導軌3 ActiveRecord::Relation相關:link1link2。所有類的方法都可以在ActiveRecord::Relation對象上執行,但請記住Coaster.all返回對象數組,而不是關係。

Coaster.scoped返回的ActiveRecord ::所有對象的關係:http://apidock.com/rails/ActiveRecord/Scoping/Named/ClassMethods/scoped

+2

好的,請你再解釋一下。我還沒有完全理解它。爲什麼Coaster.all不工作? – rctneil 2012-07-22 16:32:21