可能是一個超級簡單的解決方案,但試圖找出如何找到屬於「量」整列的總和:總和陣列使用。凡
@milestones = Milestone.where(:buyer_id => current_user.id).where(:status => 'Paid')
我認爲嘗試<%= @milestones.amount.inject(:+) %>
,沒有工作。
可能是一個超級簡單的解決方案,但試圖找出如何找到屬於「量」整列的總和:總和陣列使用。凡
@milestones = Milestone.where(:buyer_id => current_user.id).where(:status => 'Paid')
我認爲嘗試<%= @milestones.amount.inject(:+) %>
,沒有工作。
當然,它沒有工作。在Milestone
的陣列上沒有amount
。試試這個:
@milestones.map(&:amount).inject(:+)
考慮:
@milestones = Milestone.where(:buyer_id => current_user.id).
where(:status => 'Paid')
則...
<%= @milestones.sum :amount %>
或者只是:
@milestones_sum = Milestone.where(:buyer_id => current_user.id,
:status => 'Paid'
).
sum(:amount)
而且......
<%= @milestones_sum %>
@milestones
沒有一個amount
的方法,因爲它不是一個Milestone
- 這是一個ActiveRecord::Relation
或Array
。
您可以試試@milestones.map(&:amount).inject(:+)
,收集和總結Rails應用程序中的所有金額數字。
或者您可以使用@milestones.sum(:amount)
讓ActiveRecord爲您執行數據庫中的計算,這可能會更快/更高效。其他計算也可在ActiveRecord::Calculations::ClassMethods中找到。
在數據庫端使用SQL創建總和的和方法嗎?如果是這樣,那麼這可能是最好的方法,因爲它會返回更少的數據,並允許數據庫在較低的級別上完成工作。 – RHSeeger 2012-01-12 15:58:18
是的,sum是[ActiveRecord :: Calculations]的一部分(http://ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html)。 – 2012-01-12 22:24:47