Rails如何比较列值与关联模型

时间:2016-03-05 12:09:12

标签: ruby-on-rails ruby-on-rails-4

我有一个模型项目和付款

class Project < ActiveRecord::Base
  has_many :payments, :dependent => :destroy
end

class Payment < ActiveRecord::Base
  belongs_to :project
end

我正在尝试查找项目的总金额高于项目目标金额

@projects=Project.joins(:payments).where('enabled = true and amount < sum(payments.amount)')

这显示我的错误,因为我的尝试太模糊了

我应该如何用连接表中的总和来比较字段?

2 个答案:

答案 0 :(得分:0)

首先,您的错误是因为两个表都有相同的列名amount,您可以使用projects.amount解决此错误,但aggregate function sum不允许where sql的子句。您可以group by这样使用having子句:

@projects=Project.joins(:payments).group("payments.project_id").where('enabled = true').having("sum(payments.amount) > projects.amount")

您也可以尝试这种方式,因为PG不支持其他列选择哪些不在group by子句中:

@projects=Project.includes(:payments).where("projects.id = payments.project_id and enabled = true").select{ |p| p.amount < p.payements.sum(&:amount) }

答案 1 :(得分:0)

好的我找到了如何在postgres上使用建议的mysql答案的解决方案

Project.select("projects.*").joins(:payments).group("projects.id").where('enabled = true').having("sum(payments.amount) > projects.amount")

在这里找到了 https://github.com/rails/rails/issues/1515