ruby-on-rails - Rails 和模型 def 而不是列

标签 ruby-on-rails postgresql

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

相关文章:

sql - 子选择时间段

database - 如何在 Ubuntu 13.04 上更改 Postgresql 中的数据目录

ruby-on-rails - 在 Rails 中创建唯一 token 的最佳方法?

sql - 如何获取每个设备的第一个和最后一个元素?

SQL - 排序后,仅返回列中具有某些连续值的行

python - Postgre 和pyodbc 的 bool 值不兼容?

ruby-on-rails - Sidekiq 幂等性、N+1 查询和死锁

ruby-on-rails - 为什么不使用全局(美元符号 $)变量?

ruby-on-rails - Rails-api HTTP token 认证

ruby-on-rails - 是否可以有一个带有可选参数的范围?