我有一个名为Promoter
的模型和一个名为PromoterProject
的模型。每个启动子都有许多启动子项目:
class Promoter < ActiveRecord::Base
has_many :promoter_projects
end
class PromoterProject < ActiveRecord::Base
belongs_to :promoter
end
PromoterProject
模型具有整数类型的列work_days
。它代表了发起人为项目工作的天数。
我需要实现一个过滤器,在指定值之间返回具有总工作日(在所有项目中)的启动器。我在使用活动记录查询方法构建查询时遇到困难。到目前为止,我有以下内容:
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
列。
我在实习生中发现的大部分内容(组和选择语句)已经缝合了,所以我并不完全了解到底发生了什么。如果您能为我提供其他解释,我将非常感激!
其他信息:
Rails版本4.1.4 PostgreSQL的
答案 0 :(得分:2)
正如阿尔宾所说,使用连接。但是,使用聚合函数时,最简单的方法是使用having
:
Promoter.joins(:promoter_projects)
.having('SUM("promoter_projects"."work_days") BETWEEN ? AND ?', min_value, max_value)
.group("promoters.id")