2011-01-22 24 views
1

Rails 3ではActiveRecordで2つのモデル(ユーザーとタスク)があります。これらのモデルは、has_many:throughという別のモデルの関連付けによってリンクされています。特定のユーザーに関連付けられていないすべてのタスクを検索するにはどうすればよいですか?多対多関連ではないすべてのレコードを見つける

class User < ActiveRecord::Base 
    has_many :assignments 
    has_many :tasks, :through => :assignments 
end 

class Tasks < ActiveRecord::Base 
    has_many :assignments 
    has_many :users, :through => :assignments 
end 

class Assignments < ActiveRecord::Base 
    belongs_to :users 
    belongs_to :tasks 
end 
+1

あなたは本当にSQLの答えをお探しですか?そうでない場合は、おそらくあなたはそのタグを削除することを検討することができます。さもなければ、私はあなたにこれを行うためのSQLを与えることができます。 – ErikE

+0

emotuciforさんのコメントを書き込むSQLは簡単です。 SQLを使いたいですか? –

+0

それは私が好むものではありませんが、それがそれを行う唯一の方法かもしれないと思います。そう、はい、私はSQLを取るでしょう。 – tdahlke

答えて

4

ショート「N甘い:

Task.all - user.tasks 

避けローディングユーザタスク:

Task.where('id not in (?)', user.task_ids) 

私は外でそれを行う方法を見つけ出すことができませんでしたARに参加。

3

私は、特にユーザーに関連付けられているのではなく、関連するユーザーのないこれらのタスクが必要であると仮定します。

Tasks.joins('left outer join assignments on assignments.task_id = tasks.id').where('assignments.* is null') 
+0

それは左外部結合ではいけませんか? – noodl

+0

ええ、そうです、ありがとうございます。私は今何かをテストすることはできませんので、推測するべきではありません。 – mark

+0

ありがとうございました!あなたのソリューションは多くの時間を節約しました! – gayavat

関連する問題