私は一日中この作業を行ってきましたが、結果は少し醜いです。確かにもっと良い方法があるはずですが、ほぼ確実に、私はそれについて知りません。
私はモデルを持っています-Task、has_many (または none!) TimeLogs
今までインスタンス メソッドを使用して、開始されたかどうかを確認していましたか? または !started?
def started?
time_logs.length > 0
end
しかし、スコープを作成するときに、このメソッドをクエリに実装できないことがわかりました。方法があれば、私は本当に知りたいです。なぜなら、私は地平線上にいくつかの同様の問題を抱えているからです.
私がこれを解決した方法は、結合を使用して適切なデータベース スコープにリファクタリングすることでした。
scope :started, joins(:time_logs).uniq
かなりきれいですが、逆はどうですか?
scope :not_started, joins("LEFT OUTER JOIN time_logs ON tasks.id = time_logs.task_id").where("time_logs.task_id is null")
ブロー。きっとそうではありませんか?
それは機能しますが、最初のスコープが返さなかったすべてのものを返す NOT 演算子、または「Task.all - Task.started」のようなソリューションに出くわすことを願っています。