Rails Active Record查询 - '或'条件

时间:2012-11-02 17:56:02

标签: ruby-on-rails-3

我有一份工作表;每个作业都有一个start_date和一个end_date。对于某个月,我想拉出所有在某个月或任何一个月都“运行”的工作。问题是如何为5个不同的“或”条件编写查询,以捕获在该月的全部或任何部分运行的作业的概念。因此,我需要在月初之前开始并在月内结束的所有工作 OR 在该月开始和结束的所有工作 OR 所有在该工作中开始的工作月份,并在月底之后结束......好吧,五个中有三个。那么在Jobs.where子句中,“或”如何紧凑地表达?

1 个答案:

答案 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我认为我们不能缩短。如果没有ORBETWEEN可以通过以下方式优雅地表达:

Job.where(start_date: beginning_of_month..end_of_month)

但是因为你需要OR,所以想不出更好的东西,但你可能有兴趣看看squeel gem