如何通过其 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")
我有一个名为 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")