2013-05-21 2 views
1

У меня есть таблица для пользователей и ролей. Я использую много отношений. Я пытаюсь создать запрос, который найдет пользователей, которые имеют все роли в массиве.И несколько операторов JOIN в Rails

ex.

role_ids = [2, 4, 6] 
User.filter(role_ids) would return all users that have roles with ids 2, 4, 6. 

Это то, что у меня есть до сих пор.

def self.filter(role_ids) 
    results = User.joins(:roles).where(roles: {id: role_ids}) 
end 

Проблема с этим утверждением заключается в том, что она возвращает всех пользователей, имеющих хотя бы одну из ролей в role_ids.

Как мне сделать это заявление, дать мне пересечение, а не союз?

ответ

0

Я думаю, что вы запрашиваете только уникальные экземпляры пользователей, которые соответствуют критериям фильтра роли. Если это так, то это должно сработать.

def self.filter(role_ids) 
    results = User.joins(:roles).where(roles: {id: role_ids}).uniq 
end 
Смежные вопросы