Ruby on Rails: поиск всех «незавершенных задач» с помощью named_scope - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть две модели: (1) Задача и (2) Завершенная задача.

Я ищу для named_scope для: incomplete_tasks (задачи, в записи которых нет записей в таблице complete_tasks)

Я думаю, что это будет что-то вроде этого в моей модели задач:

named_scope :incomplete_tasks, :conditions => **completed_tasks.empty?**

Знаете ли вы, как я правильно нахожу все незавершенные задачи?

1 Ответ

1 голос
/ 10 ноября 2009

Предполагая, что Task has_one :completed_task и CompletedTask belongs_to :task:

named_scope :incomplete_tasks, :conditions => 'not exists (select 1 from completed_tasks where tasks.id = completed_tasks.task_id')

Другой вариант - использовать left outer join и проверять null completed_task с, но вам нужно указать :select в этом случае:

named_scope :incomplete_tasks, :select     => 'tasks.*',
                               :joins      => 'left outer join completed_tasks on tasks.id = completed_tasks.task_id'
                               :conditions => 'completed_tasks.id is null'

Первый, безусловно, более читабелен, но в некоторых базах данных подвыборы менее производительны, поэтому дайте им шанс решить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...