在我的代码,一个房间的has_many:用户,和用户有一个:name属性通过协会的ActiveRecord查询模型属性
让我们也说我有NameArr,名称的数组。
什么是让所有用户都在Arr中的所有房间的最佳方式?
(例如,如果Arr = [“John”,“Mark”,“Matt”],那么我希望所有的房间都有名为“John”的用户和名为“Mark”的用户, “)
在我的代码,一个房间的has_many:用户,和用户有一个:name属性通过协会的ActiveRecord查询模型属性
让我们也说我有NameArr,名称的数组。
什么是让所有用户都在Arr中的所有房间的最佳方式?
(例如,如果Arr = [“John”,“Mark”,“Matt”],那么我希望所有的房间都有名为“John”的用户和名为“Mark”的用户, “)
请试试这个
Room.joins(:users).where("users.name in (?)", nameArr).group("rooms.id").having("count(distinct users.name)=?", nameArr.count)
您需要做INNER JOIN
以满足需要。
Room.joins(:users).
where(users: { name: ["John", "Mark", "Matt"] })
我想'加入(:用户)。凡(用户:{名:[]})'必须是'加入(:用户)。凡(用户:{name:[]})......我相信join和where子句必须使用表名(复数)......但是让我知道如果不是:)!可能误读了一些东西! –
@ craig.kaminsky你是对的..我有致命的错字..未尝试过的代码..从概念写道,所以它是越野车.. :) –
大声笑!我一直这么做:)。周末愉快! –
我相信这解决了这个问题,如果我正在寻找具有名称为“John”的用户的房间或名称为“Mark”的用户......但是我正在寻找具有名称为“John”的用户的房间,名称为“Mark”的用户 谢谢! –
按照您的新要求,您需要** ** **除**或**之外的行为。在这里没有默认的子句,所以我们需要为此目的创建自定义查询。我为你建立了一个查询,请试试这个: 'Room.joins(:users).where(“users.name in(?)”,nameArr).group(“rooms.id”)。having(“count(distinct users .name)=?“,nameArr.count)' –
我更新了我的答案。希望这会起作用,请尝试一下。 谢谢 –