我有两个有关联的模型,比如说:
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查询一起使用,但我不能在WHERE
上使用汇总函数,我可以使用的其他选项本来是HAVING
但我不确定在这种情况下该怎么办
我正在寻找可以使用ActiveRecord或Arel组合轻松完成的查询,基本上可以执行以下操作:
WHERE visits.made_purchases = true OR visits.purchase_amount is NOT NULL OR HAVING COUNT(*) of payments > 0
答案 0 :(得分: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 != '')")