2015-08-28 87 views
0

在我的代码,一个房间的has_many:用户,和用户有一个:name属性通过协会的ActiveRecord查询模型属性

让我们也说我有NameArr,名称的数组。

什么是让所有用户都在Arr中的所有房间的最佳方式?

(例如,如果Arr = [“John”,“Mark”,“Matt”],那么我希望所有的房间都有名为“John”的用户和名为“Mark”的用户, “)

回答

0

请试试这个

Room.joins(:users).where("users.name in (?)", nameArr).group("rooms.id").having("count(distinct users.name)=?", nameArr.count) 
+0

我相信这解决了这个问题,如果我正在寻找具有名称为“John”的用户的房间或名称为“Mark”的用户......但是我正在寻找具有名称为“John”的用户的房间,名称为“Mark”的用户 谢谢! –

+0

按照您的新要求,您需要** ** **除**或**之外的行为。在这里没有默认的子句,所以我们需要为此目的创建自定义查询。我为你建立了一个查询,请试试这个: 'Room.joins(:users).where(“users.name in(?)”,nameArr).group(“rooms.id”)。having(“count(distinct users .name)=?“,nameArr.count)' –

+0

我更新了我的答案。希望这会起作用,请尝试一下。 谢谢 –

2

您需要做INNER JOIN以满足需要。

Room.joins(:users). 
    where(users: { name: ["John", "Mark", "Matt"] }) 
+1

我想'加入(:用户)。凡(用户:{名:[]})'必须是'加入(:用户)。凡(用户:{name:[]})......我相信join和where子句必须使用表名(复数)......但是让我知道如果不是:)!可能误读了一些东西! –

+0

@ craig.kaminsky你是对的..我有致命的错字..未尝试过的代码..从概念写道,所以它是越野车.. :) –

+0

大声笑!我一直这么做:)。周末愉快! –