2011-07-06 42 views
0

我的應用程序有發票和invoice_items。每張發票都有許多invoice_items。列計算Rails 3

在我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) 

感謝

回答

3

你在整個invoice_items數組中調用.sum(顯然不知道.total方法),而不是每個個人l發票項目。 爲了使其工作,您希望使用總和的塊版本,該總和將數組中的每個單個項目生成到塊中,並總結其結果。

用符號來處理語法糖,你幾乎就在那裏。 嘗試invoice.invoice_items.all.sum(&:total)這相當於invoice.invoice_items.inject(0) { |sum, item| sum + item.total }

看到RDoc for Enumerable#sum

+0

感謝您的幫助。嘗試頂層方法時,我收到一個錯誤。已更新我的第一個問題。 Jx –

+0

更新了我的答案,.all失蹤了 – paukul

+0

非常棒!謝謝 :) –