Ruby on rails ActiveRecord:查询父记录,其中子记录在AND查询中具有特定值

Ruby on rails ActiveRecord:查询父记录,其中子记录在AND查询中具有特定值,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,通常我理解,如果将一个值数组传递给ActiveRecord查询,它会像OR语句一样执行它。也就是说: Parent.joins(:kiddos).where(kiddos:{rando_attr:[1,2]}) 此查询查找父对象,其中父对象的kiddo对象的rando_attr值为1或2 然而,在我的例子中,我想寻找Parent对象,其中父对象的kiddo对象的rando_attr值为1,还有kiddo对象的rando_attr值为2 如何编写此查询?Parent.joins(:kiddos)

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

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

此查询查找父对象,其中父对象的
kiddo
对象的
rando_attr
值为1或2

然而,在我的例子中,我想寻找
Parent
对象,其中父对象的
kiddo
对象的
rando_attr
值为1,还有
kiddo
对象的
rando_attr
值为2

如何编写此查询?

Parent.joins(:kiddos)
.where(kiddos:{rando_attr:[1,2]})
.group(:id).having('COUNT(DISTINCT(kiddos.rando_attr))=2')

事实上,数组语法会生成一个IN查询(类似于逻辑or),分组的替代方法(@Lam的答案)是使用2个where

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

这实际上是我最初的方法(尝试只使用AR,而不是纯SQL)。我发布了这个问题,因为这不起作用。。。无论
rando_attr
查询传递的顺序是什么,它只对第一个查询有效。第二个查询返回一个空白数组…@james-hmm这很奇怪,我不明白为什么会发生这种情况。