1

私はジョブテーブルを持っています。各ジョブにはstart_dateとend_dateがあります。特定の月について、ある月のいずれかの部分またはすべてで「実行中」だったすべてのジョブをプルしたいと思います。問題は、月のすべてまたは一部で実行されているジョブの概念をキャプチャするために必要な5つの異なる「または」条件のクエリをどのように作成するかです。したがって、月の初めより前に開始して月の間に終了したすべてのジョブ、または月の間に開始および終了したすべてのジョブ、または月に開始して月の終わりの後に終了したすべてのジョブが必要です... 5つのうち3つがあります。では、Jobs.where句では、「または」はどのようにコンパクトに表現されているのでしょうか。

4

1 に答える 1

3
beginning_of_month = Time.now.beginning_of_month
end_of_month = Time.now.end_of_month
Job.where("(start_date BETWEEN ? AND ?) OR (end_date BETWEEN ? AND ?)", beginning_of_month, end_of_month, beginning_of_month, end_of_month)

標準のActiveRecordを使用すると、これ以上短くできるとは思いません。がなくてもORBETWEENこのようにエレガントに表現できます。

Job.where(start_date: beginning_of_month..end_of_month)

しかし、あなたはを必要としているので、これ以上のことは考えられませんが、あなたはsqueelgemORを見ることに興味があるかもしれません

于 2012-11-02T18:07:59.483 に答える