Найти все записи НЕ в ассоциации «многие ко многим» - PullRequest
1 голос
/ 22 января 2011

В Rails 3 с ActiveRecord у меня есть 2 модели (пользователи и задачи). Эти модели связаны вместе с помощью has_many: через ассоциацию с другой моделью, Assignments. Как найти все задачи, которые НЕ связаны с конкретным пользователем?

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 ]

4 голосов
/ 23 января 2011

Short 'n sweet:

Task.all - user.tasks

Избегайте загрузки пользовательских задач:

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

Я не мог понять, как это сделать с помощью внешнего соединения в AR.

3 голосов
/ 22 января 2011

Я предполагаю, что вы хотите, чтобы эти задачи выполнялись без какого-либо связанного пользователя, а не с каким-либо конкретным пользователем.

Tasks.joins('left outer join assignments on assignments.task_id = tasks.id').where('assignments.* is null')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...