【问题标题】:ActiveRecord: Querying for parent record where child records have certain values in an AND queryActiveRecord:查询父记录,其中子记录在 AND 查询中具有某些值
【发布时间】:2021-06-08 23:04:44
【问题描述】:

通常我知道,如果您将一组值传递给 ActiveRecord 查询,它会像 OR 语句一样执行它。也就是说:

Parent.joins(:kiddos).where(kiddos: {rando_attr:[1,2]})

此查询查找 Parent 对象,其中父对象具有 kiddo 对象,该对象具有 1 或 2 的 rando_attr

然而,就我而言,我想查找 Parent 对象,其中父对象具有 kiddo 对象,rando_attr 为 1,并且还具有 kiddo 对象,rando_attr 为 2。

我将如何编写这个查询?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:
    Parent.joins(:kiddos)
    .where(kiddos: {rando_attr:[1,2]})
    .group(:id).having('COUNT(DISTINCT(kiddos.rando_attr)) = 2')
    

    【讨论】:

      【解决方案2】:

      确实,数组语法会进行 IN 查询(​​类似于逻辑或),分组的替代方法(@Lam 的答案)可以使用 2 wheres

      Parent.joins(:kiddos).where(kiddos: {rando_attr: 1}).where(kiddos: {rando_attr: 2})
      

      【讨论】:

      • 这实际上是我最初的方法(尝试仅使用 AR,而不是纯 SQL)。我发布了这个问题,因为这不起作用......无论通过什么顺序 rando_attr 查询,它只适用于第一个查询。第二个查询返回一个空白数组...
      • @james 嗯,这很奇怪,我不明白为什么会发生这种情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多