1

我有一张工作表;每个作业都有一个 start_date 和一个 end_date。对于给定的月份,我想拉出在某个月的任何部分或全部“运行”的所有工作。问题是如何为 5 个不同的“或”条件编写查询,以捕获在一个月的全部或任何部分运行的作业的概念。所以,我需要在月初之前开始并在当月结束的所有工作,或者在当月开始和结束的所有工作,或者在当月开始并在月底之后完成的所有工作......好吧,五个中有三个。那么在 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)

但既然你需要OR,想不出更好的了,但你可能有兴趣看看squeel gem

于 2012-11-02T18:07:59.483 回答