代码之家  ›  专栏  ›  技术社区  ›  sjsc

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

  •  0
  • sjsc  · 技术社区  · 16 年前

    我有两个模型:(1)任务和(2)已完成任务。

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

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   hgmnz    16 年前

    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'
    

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

    推荐文章