2012-01-12 76 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中找到。