列计算Rails 3

时间:2011-07-06 22:17:17

标签: ruby-on-rails ruby

我的应用有发票和invoice_items。每张发票都有很多invoice_items。

在我的invoice_items模型中,我有一个计算总计:

def total
   @total ||= quantity.to_d * price
end

工作正常。我想要做的是计算总数的总和,我被卡住了。

在控制台中,我试过这个:

invoice = Invoice.first
invoice.invoice_items.sum(:total)

但我得到一个错误说:总不存在。我猜它没有。

我的问题是如何进行此计算?

- 更新 -

我按照@ paukul的回答尝试了以下内容:

invoice.invoice_items.sum(&:total)

这给出了错误:

ArgumentError: wrong number of arguments (1 for 2)

由于

1 个答案:

答案 0 :(得分:3)

您在整个invoice_items数组(显然不知道.total方法)而不是每个单独的发票项目上调用.sum。 为了使它工作,你想使用sum的块版本,它将数组中的每个项目产生到块并总结它们的结果。

用符号来处理句法糖,你几乎就在那里。 请尝试相当于invoice.invoice_items.all.sum(&:total)

invoice.invoice_items.inject(0) { |sum, item| sum + item.total }

请参阅RDoc for Enumerable#sum