如何通过其 has_many 关系的属性总和来过滤模型

How to filter model by the sum of an attribute of its has_many relation

我有一个名为 Promoter 的模型和一个名为 PromoterProject 的模型。每个发起人有多个发起人项目:

class Promoter < ActiveRecord::Base
  has_many :promoter_projects
end

class PromoterProject < ActiveRecord::Base
  belongs_to :promoter
end

PromoterProject 模型有一个整数类型的列 work_days。它代表发起人在项目上工作的天数。

我需要实施一个过滤器,returns 发起人的总工作日数(在他们所有的项目中)在指定值 之间。我在使用活动记录查询方法构建查询时遇到困难。到目前为止,我有以下内容:

Promoter.includes(:promoter_projects).group('promoters.id').select('promoters.*, sum(promoter_projects.work_days) as total_days').where('total_days between ? and ?', min_value, max_value)

我收到一条错误消息,提示无法找到 total_days

大部分行(组和 select 语句)是我从实习生中找到的东西拼接而成的,所以我不完全理解到底发生了什么。如果您能给我提供额外的解释,我将不胜感激!

附加信息:

Rails 版本 4.1.4 PostgreSQL

正如阿尔宾所说,使用连接。但是,在使用聚合函数时,使用having:

是最简单的
Promoter.joins(:promoter_projects)
.having('SUM("promoter_projects"."work_days") BETWEEN ? AND ?', min_value, max_value)
.group("promoters.id")