Rails / AR找到habtm不包含的位置

时间:2009-07-15 17:00:12

标签: sql ruby-on-rails has-and-belongs-to-many searchlogic

我有一个用户的Rails应用程序,以及每个用户HABTM Roles。

我想选择没有特定角色的用户。我有搜索逻辑,我迷失了。我尝试过使用条件和连接的组合,包括什么不包括,但我似乎无法指出它。这有效:

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

查找非管理员用户,但找不到没有角色的用户(我也想查找)。

在疲惫不堪的状态下,我错过了什么简单的事情?

3 个答案:

答案 0 :(得分:2)

使用子查询和NOT IN运算符

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

答案 1 :(得分:0)

我能做到

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

哪个在两个查询中完成了我想要的东西,这对于这个项目来说可能很好,但是如果我能把它放到一个查询中那就太好了。

答案 2 :(得分:0)

这个怎么样:

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

适用于has_many :through,对于HABTM来说似乎应该是相同的。