Вопрос

У меня есть приложение Rails с пользователями и каждая пользовательская роль HABTM.

Я хочу выбрать пользователей без определенной роли. У меня в SearchLogic в моем распоряжении, и я потерян. Я пытался использовать комбинацию условий и соединений и включает, а что нет, но я не могу прибить это. Это работает:

User.find(:all, :conditions => ['role_id != ?', Role[:admin].id], :joins => :roles)

Чтобы найти пользователей, которые не являются администраторами, но не находят пользователей без ролей (которые я также хочу найти).

Что просто мне не хватает в своем усталом состоянии?

Это было полезно?

Решение

Как насчет этого:

User.find :all, :conditions => [ 'roles.id is ? or roles.id != ?', nil, Role[:admin].id ], :include => :roles

Это работает для has_many :through, похоже, это должно быть то же самое для Habtm.

Другие советы

Используйте подрезы и не в операторе

User.find(:all,:conditions => ["id NOT IN (select user_id from roles_users where role_id = ?)", Role[:admin].id)

я могу сделать

User.all - User.find(:all, :conditions => ['role_id = ?', Role[:admin].id], :joins => :roles)

Который выполняет то, что я хочу в двух запросах, что, вероятно, в порядке для этого проекта, но если я смогу получить его на один запрос, это было бы неплохо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top