我有2个具有关联的模型,例如:
class Visit
# column names: made_purchases, purchase_amount
has_many :payments
end
class Payment
# column names: amount
belongs_to :visit
end
现在,我想对以下任何一个匹配的所有访问进行查询:
1. made_purchases is true
OR
2. purchase_amount is not null
OR
3. has any associated payments
我试图创建一个子查询来计算付款的数量并尝试将其与我的查询一起使用,但是我不能在WHERE
上使用聚合功能,我可以使用的另一个选项是HAVING
,但是我'm不确定在这种情况下如何工作
我正在寻找可以很容易地使用Activerecord或Arel组成进行的查询,该查询基本上可以做类似的问题:
伪代码:
WHERE visits.made_purchases = true OR visits.purchase_amount is NOT NULL OR HAVING COUNT(*) of payments > 0
我发现,即使HAVING
子句对组有用,您仍然可以添加行滤镜并获得所需的结果。
在这里,我结束了:
Visits.having("(SELECT COUNT(*) FROM payments WHERE payments.visit_id= visits.id) > 0 OR visits.made_purchases= true OR (visits.purchase_amount IS NOT NULL AND visits.purchase_amount != '')")