0

我有一个带有用户的 Rails 应用程序,每个用户都有 HABTM 角色。

我想选择没有特定角色的用户。我可以使用搜索逻辑,但我迷路了。我尝试过使用条件、连接和包含的组合,但我似乎无法确定它。这有效:

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

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

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

4

3 回答 3

2

使用子查询和 NOT IN 运算符

User.find(:all,:conditions => ["id NOT IN (select user_id from roles_users where role_id = ?)", Role[:admin].id)
于 2009-07-15T18:23:47.593 回答
0

我可以

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

它在两个查询中完成了我想要的,这对于这个项目来说可能很好,但是如果我可以将它变成一个查询,那就太好了。

于 2009-07-15T17:06:14.223 回答
0

这个怎么样:

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

这适用于has_many :through,似乎它应该与 HABTM 相同。

于 2009-07-15T18:15:52.023 回答