2011-03-01 95 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

相關問題