我有一份工作表;每个作业都有一个start_date和一个end_date。对于某个月,我想拉出所有在某个月或任何一个月都“运行”的工作。问题是如何为5个不同的“或”条件编写查询,以捕获在该月的全部或任何部分运行的作业的概念。因此,我需要在月初之前开始并在月内结束的所有工作 OR 在该月开始和结束的所有工作 OR 所有在该工作中开始的工作月份,并在月底之后结束......好吧,五个中有三个。那么在Jobs.where子句中,“或”如何紧凑地表达?
答案 0 :(得分: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我认为我们不能缩短。如果没有OR
,BETWEEN
可以通过以下方式优雅地表达:
Job.where(start_date: beginning_of_month..end_of_month)
但是因为你需要OR
,所以想不出更好的东西,但你可能有兴趣看看squeel gem