Ruby on rails Rails 5:查询空关联
我有两种型号Ruby on rails Rails 5:查询空关联,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有两种型号Client和MealWeek,我希望能够在没有任何活动的用餐周的情况下吸引所有客户。我可以通过执行以下任一操作来拉动每周的活动膳食: Client.find(x).meal_weeks.where(active: true) Client.find(x).meal_weeks.unused 我可以通过活跃的用餐周轻松吸引客户: Client.includes(:meal_weeks).where(meal_weeks: { active: true }) 但是,对于没有每周积极
Client
和MealWeek
,我希望能够在没有任何活动的用餐周的情况下吸引所有客户。我可以通过执行以下任一操作来拉动每周的活动膳食:
Client.find(x).meal_weeks.where(active: true)
Client.find(x).meal_weeks.unused
我可以通过活跃的用餐周轻松吸引客户:
Client.includes(:meal_weeks).where(meal_weeks: { active: true })
但是,对于没有每周积极进餐的客户来说,情况并非如此。我已尝试在上面的查询中包含一个not
,但它返回所有具有非活动的用餐周的客户,而不是没有任何活动用餐周的客户(所有用餐周均活动:false
)
有办法做到这一点吗?在rails 5+中,您可以使用
where.not
,因此在这种情况下,您的查询将是
Client.where.not(id:
Client.select(:id).joins(:meal_weeks)
.where(meal_weeks: {active: true})
)
这将使用原始版本的子查询作为NOT IN子句。结果SQL
SELECT
clients.*
FROM
clients
WHERE
clients.id NOT IN (
SELECT
clients.id
FROM
clients
INNER JOIN meal_weeks ON meal_weeks.client_id=clients.id
WHERE
meal_weeks.active= true
)
对不起,我不明白你的问题。具有非活动…的
客户机与没有任何活动…
的客户机不一样吗?客户机。包括(:用餐周)。where.not(用餐周:{active:true})
这将查找任何用餐周为假的客户机,而不是所有为假的客户机。希望这是有道理的:)@fanta我想要@Gabbar所说的。我想找到客户,他们每周的用餐时间都是活动的:false
我从来没有想到会这样!非常聪明