使用.where的数组总和

时间:2012-01-12 07:00:21

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

可能是一个超级简单的解决方案,但试图弄清楚如何找到属于的“金额”整数列的总和:

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

我在视图中尝试了<%= @milestones.amount.inject(:+) %>,但没有效果。

3 个答案:

答案 0 :(得分: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 %>

答案 1 :(得分:3)

当然,它没有用。 amount的数组上没有Milestone。试试这个:

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

答案 2 :(得分:2)

@milestones没有amount方法,因为它不是Milestone - 它是ActiveRecord::RelationArray

您可以尝试@milestones.map(&:amount).inject(:+),收集并汇总Rails应用程序中的所有金额数字。

或者您可以使用@milestones.sum(:amount)让ActiveRecord为您在数据库中执行计算,这可能更快/更有效。其他计算也可在ActiveRecord::Calculations::ClassMethods中找到。