2009-07-15 2 views
0

私はRailsアプリケーションをユーザと各ユーザのHABTMロールを持っています。Rails/AR habtmには含まれていない場所を見つける

特定の役割を持たないユーザーを選択したいと考えています。私は自分のサーチロジックを持っており、私は迷っています。私は条件と結合の組み合わせを使用しようとしたが、それは含まれていませんが、私はそれを釘付けにすることはできません。これは動作します:

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

管理者ではなく、ロールを持たないユーザー(見つけたいユーザー)を見つけることはできません。

私は疲れた状態で何が欠けていますか?

答えて

0

:これはhas_many :throughのために働く

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

それはHABTMのために同じである必要がありますように、と思われます。

+0

サブクエリと、NOTを使用してください。 – Shadwell

+0

、質問をあまりにも速く読んでください。ありがとう、それを修正しました。 – austinfromboston

+0

これは、各ユーザーが1つの役割しか持っていない場合にのみ有効です。 – clem

0

私はおそらく、このプロジェクトのための罰金ですが、私は、単一のクエリにそれを得ることができれば、それはいいだろう、私は2つのクエリで欲しいものを達成し

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

を行うことができます。これはどのように

2

は、私はただの役割なしではなく、特定の役割を持たないユーザを見つけることはかなり確信しているオペレータ

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

これは私の一日を作りました、ありがとう! – clem

関連する問題