我有一个包含发票的Rails应用。
我在发票控制器中使用此def:
def invoice_total
self.invtimes.sum('price') + self.invexpenses.sum('price') + self.invaddhocs.sum('price') + self.invitems.sum('price') - self.payments.sum('amount')
end
有没有办法求和invoice_total
?
我试过了:
<td><%= Invoice.notdraft.where("invoice_date >= ? AND invoice_date < ?", janday, febday).sum(:invoice_total) %></td>
但是,Rails告诉我:
PG::Error: ERROR: column "invoice_total" does not exist
感谢您的帮助!
答案 0 :(得分:2)
您正在调用一个触发SQL SUM
的ActiveRecord方法,但是传递给此方法的参数是模型中定义的方法(Ruby知道它,SQL更深层次,不知道它)。
您有两种选择:
将.invoice_total
更改为select中的SQL总和,这意味着您在.invoice_total
方法中执行的逻辑可以通过SQL完成,但我无法帮助您那个,我对PostgreSQL不太好......
使用ruby计算invoice_total
的总和,例如Invoice.your_scopes.map(&:invoice_total).inject(:+)