查找不在多对多关联中的所有记录

时间:2011-01-22 17:42:30

标签: sql ruby-on-rails activerecord

在使用ActiveRecord的Rails 3中,我有2个模型(用户和任务)。这些模型与has_many:通过另一个模型上的关联,分配链接在一起。如何找到与特定用户无关的所有任务?

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

2 个答案:

答案 0 :(得分:4)

短暂的甜蜜:

Task.all - user.tasks

避免加载用户任务:

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

我无法弄清楚如何在AR中使用外部联接。

答案 1 :(得分:3)

我将假设您希望这些任务没有任何关联用户,而不是特别是与用户无关。

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