我有一个包含发票的 Rails 应用。
我在发票 Controller 中使用这个定义:
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
感谢您的帮助!
最佳答案
您正在调用触发 SQL SUM
的 ActiveRecord 方法,但是您传递给此方法的参数是模型中定义的方法(Ruby 知道它,SQL 更深一层并且不知道)。
你有两个选择:
在 select 中将
.invoice_total
更改为 SQL sum,这意味着您在.invoice_total
方法中执行的逻辑可以通过 SQL 完成,但我帮不了你,我对 PostgreSQL 不是很好...使用 ruby 计算
invoice_total
的总和,类似于Invoice.your_scopes.map(&:invoice_total).inject(:+)
关于ruby-on-rails - Rails 和模型 def 而不是列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387031/