我有两个模型:(1)任务,(2)CompletedTask。
我正在寻找一个named_scope:incomplete_tasks(在completed_tasks表中没有任何条目的任务)
我认为在我的任务模型中它会是这样的:
named_scope :incomplete_tasks, :conditions => **completed_tasks.empty?**
你知道我如何正确找到所有未完成的任务吗?
答案 0 :(得分:1)
假设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'
第一个肯定是更具可读性,但是子选择在某些数据库上的性能较差,所以给他们一个决定