2011-05-18 106 views
3

這幾乎在Difference Between find and Where with Relationships中回答,但不完全相同。 (請注意,我是如何巧妙地改變了問題的標題!) 我做的查詢「where」和「find」之間的區別

a = Libation.where("user_id = 1") # gets 10 records 
b = a.sum("count * weight")   # Get right answer 
c = Libation.where("user_id = 2") # gets 8 records 
d = c.sum("count * weight")   # Get right answer 

現在我做

e = Libation.all    # gets 18 records, good 
f = e.sum("count * weight")  # BOOM! I get 

NoMethodError (undefined method `+' for #<Libation:0x3b91e88>): 

堅果。我試圖找到相關的文檔,但發現很少。或者我不在正確的位置。

回答

6

#where返回一個ActiveRecord::Relation對象,您可以在其上執行其他方法(如#sum)。但是,#all執行該查詢會返回一個結果數組,因此當您執行e.sum(...)時,您試圖在Array對象上執行#sum而不是ActiveRecord::Relation對象。

您可以嘗試使用#scoped代替:

e = Libation.scoped 
f = e.sum("count * weight") 
+0

謝謝,非常好的解釋。關於時間我讀了範圍。 – rtfminc 2011-05-20 06:39:47

1

Model.where(condition)返回一個活動的關係,所以當你a = Libation.where(...)你沒有得到一個數組,而是一個主動的關係上,您可以鏈接其他方法你做下面b = a.sum(...)

Libation.all返回對象的數組,實際執行的數據庫查詢(用在哪裏,只有當你試圖在返回的結果迭代例如查詢調用)

+0

謝謝!感謝你的回答。 – rtfminc 2011-05-20 06:41:38

相關問題