Предполагая, что 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'
Первый, безусловно, более читабелен, но в некоторых базах данных подвыборы менее производительны, поэтому дайте им шанс решить