Rails / AR найти, где habtm не включает - PullRequest
0 голосов
/ 15 июля 2009

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

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

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

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

Какую простую вещь мне не хватает в моем уставшем состоянии?

Ответы [ 3 ]

2 голосов
/ 15 июля 2009

Используйте подзапрос и оператор NOT IN

User.find(:all,:conditions => ["id NOT IN (select user_id from roles_users where role_id = ?)", Role[:admin].id)
0 голосов
/ 15 июля 2009

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

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

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

0 голосов
/ 15 июля 2009

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

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

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

...