我的Rails数据库方案有项目和任务。我想展示至少有一个开放任务的项目。这是我的代码:
class Project
scope :open_tasks, lambda {
where(:tasks => {:finished => false}).includes(:tasks)
}
...
end
此代码正确地返回具有一个打开任务的项目,但只返回一个打开的任务,而不是全部。例如一个项目共有5个任务和2个开放任务,上面的代码只返回带有2个任务的项目。我知道我可以简单地强制重新加载项目,但这非常hackish并且存在性能问题。 如何让项目完成所有任务?
答案 0 :(得分:1)
where
条件总是会限制返回哪些相关任务。
如果至少其中一项任务没有完成,听起来你想要返回项目和所有相关任务而不管状态?
你可以尝试这个(我不认为你需要lambda,因为你没有在你的范围内使用任何变量/时间等)。它假设您有has_many :tasks
和belongs_to :project
。如果你使用的是has_many:through等,你需要调整它。
scope :open_tasks, where("(select count(*) from tasks where tasks.project_id=projects.id) > 0").includes(:tasks)