2012-01-12 75 views
0

可能是一個超級簡單的解決方案,但試圖找出如何找到屬於「量」整列的總和:總和陣列使用。凡

@milestones = Milestone.where(:buyer_id => current_user.id).where(:status => 'Paid') 

我認爲嘗試<%= @milestones.amount.inject(:+) %>,沒有工作。

回答

3

當然,它沒有工作。在Milestone的陣列上沒有amount。試試這個:

@milestones.map(&:amount).inject(:+) 
5

考慮:

@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 %> 
+0

在數據庫端使用SQL創建總和的和方法嗎?如果是這樣,那麼這可能是最好的方法,因爲它會返回更少的數據,並允許數據庫在較低的級別上完成工作。 – RHSeeger 2012-01-12 15:58:18

+0

是的,sum是[ActiveRecord :: Calculations]的一部分(http://ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html)。 – 2012-01-12 22:24:47

2

@milestones沒有一個amount的方法,因爲它不是一個Milestone - 這是一個ActiveRecord::RelationArray

您可以試試@milestones.map(&:amount).inject(:+),收集和總結Rails應用程序中的所有金額數字。

或者您可以使用@milestones.sum(:amount)讓ActiveRecord爲您執行數據庫中的計算,這可能會更快/更高效。其他計算也可在ActiveRecord::Calculations::ClassMethods中找到。