Ruby on Rails:通过named_scope查找所有“未完成的任务”

时间:2009-11-09 22:27:59

标签: ruby-on-rails ruby

我有两个模型:(1)任务,(2)CompletedTask。

我正在寻找一个named_scope:incomplete_tasks(在completed_tasks表中没有任何条目的任务)

我认为在我的任务模型中它会是这样的:

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

你知道我如何正确找到所有未完成的任务吗?

1 个答案:

答案 0 :(得分:1)

假设Task has_one :completed_taskCompletedTask 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'

第一个肯定是更具可读性,但是子选择在某些数据库上的性能较差,所以给他们一个决定