2015-08-28 2 views
0

В моем коде, has_many номер: пользователей, а пользователи имеют: имя атрибутаActiveRecord модель запроса Ассоциации атрибутов

Давайте также сказать, что я NameArr, массив имен.

Каков наилучший способ получить все номера, в которых есть все пользователи в Arr?

(например, если Arr = ["John", "Mark", "Matt"], то я хочу, чтобы все Комнаты имели пользователя с именем «John» и пользователя с именем «Mark» И пользователя с именем «Matt» ")

ответ

0

Пожалуйста, попробуйте этот

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

Я верю, что это решает вопрос, ищу ли я Комнаты с пользователем с именем «Джон» ИЛИ с именем «Марк» ... но я ищу Комнаты, имеющие пользователя с именем «Джон» И Пользователь с именем «Марк» Спасибо! –

+0

Согласно вашему новому требованию, вы хотите, чтобы поведение как ** IN ** запрашивалось с ** И ** за исключением ** ИЛИ **. Для этого в mysql нет предложения по умолчанию, поэтому нам нужно создать пользовательский запрос для этой цели. Я создаю запрос для вас, пожалуйста, попробуйте это 'Room.joins (: users) .where (" users.name in (?) ", NameArr) .group (" rooms.id "). Having (" count (отдельные пользователи .name) =? ", nameArr.count)' –

+0

Я обновил свой ответ. Надеюсь, это сработает, пожалуйста, попробуйте. Спасибо –

2

Вам необходимо сделать INNER JOIN для удовлетворения потребностей.

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

Я думаю, что 'присоединяется (: пользователь) .гд (пользователь: {Имя: []})' должен быть 'присоединяется (: пользователи) .гд (пользователи : {name: []}) '... Я считаю, что предложение join и where должно использовать имя таблицы (множественное число) ... но дайте мне знать, если нет :)! Возможно, что-то неправильно понял! –

+0

@ craig.kaminsky Вы правы .. У меня была смертельная опечатка .. Неиспользованный код .. написал из концепции, так что это глючит .. :) –

+0

LOL! Я делаю это все время :). Хороших выходных! –

Смежные вопросы