我的应用有发票和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)
由于
答案 0 :(得分:3)
您在整个invoice_items数组(显然不知道.total方法)而不是每个单独的发票项目上调用.sum。 为了使它工作,你想使用sum的块版本,它将数组中的每个项目产生到块并总结它们的结果。
用符号来处理句法糖,你几乎就在那里。
请尝试相当于invoice.invoice_items.all.sum(&:total)
invoice.invoice_items.inject(0) { |sum, item| sum + item.total }