1

私のRailsdbスキームにはプロジェクトとタスクがあります。少なくとも1つの未解決のタスクがあるプロジェクトを表示したいと思います。これは私のコードです:

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

このコードは、1つの開いているタスクでプロジェクトを正しく返しますが、開いているタスクは1つだけで、すべてではありません。たとえば、プロジェクトに合計5つのタスクと2つの開いているタスクがある場合、上記のコードは2つのタスクを持つプロジェクトのみを返します。プロジェクトを強制的にリロードすることもできますが、これは非常にハックであり、パフォーマンスの問題があります。すべてのタスクでプロジェクトを取得するにはどうすればよいですか?

4

1 に答える 1

1

条件によって、where返される関連タスクが常に制限されます。

これらのタスクの少なくとも 1 つが終了していない場合、ステータスに関係なく、プロジェクトとそれに関連するすべてのタスクを返したいと思われますか?

これを試すことができます(スコープで変数/時間などを使用していないため、ラムダは必要ないと思います)。と があることを前提としてい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)
于 2011-03-01T14:33:21.417 に答える