我为客户提供以下范围:
scope :filter, -> {
joins(:subscriptions)
.where("subscriptions.end_date <= ?", 1.year.ago.to_date)
}
如果客户有一个订阅少于一年但是如果他们有2个订阅且一个超过一年且一个少于一年,则此范围可以正常工作,它仍然包含在此范围内。
如果其中一个订阅与where语句不匹配,如何将范围写入NOT not the customer?
答案 0 :(得分:1)
你可以做一个子查询,你可以计算订阅数量&gt; 1.year.ago,并将该计数与0进行比较 它看起来像这样
scope :filter, -> {
joins(:subscriptions)
.where("subscriptions.end_date <= ?", 1.year.ago.to_date)
.where("(select count(subscriptions.id) from subscriptions where subscriptions.customer_id = id && subscriptions.end_date > ?) = 0", 1.year.ago.to_date)
}