Rails总和模型def而不是列

时间:2014-10-15 16:02:43

标签: ruby-on-rails postgresql

我有一个包含发票的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

感谢您的帮助!

1 个答案:

答案 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(:+)