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
我从来没有想到会这样!非常聪明