2011-03-01 67 views
1

My Rails db方案包含项目和任务。我想展示至少有一个开放任务的项目。这是我的代码:Rails 3:选择子模型具有一定条件的所有子模型

class Project 
    scope :open_tasks, lambda { 
     where(:tasks => {:finished => false}).includes(:tasks) 
    } 
    ... 
end 

此代码正确返回一个打开任务的项目,但只有一个打开的任务,而不是全部。例如一个项目共有5个任务和2个开放任务,上面的代码只会返回2个任务的项目。我知道我可以简单地强制重新加载项目,但是这非常黑客并且存在性能问题。 如何获得项目的所有任务?

回答

1

where条件总是会限制返回哪些相关任务。

听起来好像你想要返回项目和所有相关的任务,不管状态如何如果至少有一个任务没有完成?你可以试试这个(我不认为你需要lambda表达式,因为你没有在你的范围中使用任何变量/次/等)。它假定你有一个has_many :tasksbelongs_to :project。你需要调整它,如果你正在使用has_many:through等。

scope :open_tasks, where("(select count(*) from tasks where tasks.project_id=projects.id) > 0").includes(:tasks) 
+0

嗨,lambda是从以前的测试。您的解决方案有效,谢谢。 – hjuskewycz 2011-03-01 15:12:59

相关问题