我有一个用户的Rails应用程序,以及每个用户HABTM Roles。
我想选择没有特定角色的用户。我有搜索逻辑,我迷失了。我尝试过使用条件和连接的组合,包括什么不包括,但我似乎无法指出它。这有效:
User.find(:all, :conditions => ['role_id != ?', Role[:admin].id], :joins => :roles)
查找非管理员用户,但找不到没有角色的用户(我也想查找)。
在疲惫不堪的状态下,我错过了什么简单的事情?
答案 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来说似乎应该是相同的。