在我的 Rails 应用程序中,我有一些带有 start_date
和 end_date
的项目。现在我创建了一个名为 active_projects
的方法,它检索该特定月份内的所有项目。我可以使用 2 个参数(month
和 year
)调用该方法,如下所示:
def self.active_projects(month, year)
...
end
这意味着任何在一个月内有部分处于事件状态的项目都被视为处于事件状态。 现在假设我想要获取 2014 年 2 月以来的所有事件项目,我有这 4 个项目:
project1(start_date: 01-01-2014, end_date: 31-12-2014)
project2(start_date: 01-01-2014, end_date: 15-02-2014)
project3(start_date: 16-02-2014, end_date: 19-02-2014)
project4(start_date: 20-02-2014, end_date: 31-12-2014)
正如您所看到的,本月只有project3完全失败,其他项目只有部分失败,但都应该被视为活跃。我如何获得所有这些重叠的开始日期和结束日期?
而且您不能只使用 Date.today
,因为我也可以询问过去或将来的一个月。
最佳答案
如果项目的开始日期在月底或之前并且结束日期在月初或之后,则项目处于事件状态。
然后:
Project.where("start_date <= ? and end_date >= ?",
Date.new(2013,4,1).end_of_month,
Date.new(2013,4,1))
以范围形式,我想:
scope :active_in_month, ->(year,month){where("start_date <= ? and end_date >= ?",Date.new(year,month,1).end_of_month,Date.new(year,month,1))}
然后调用:
Project.active_in_month(2014,3)
关于ruby-on-rails - 获取一个月内所有活跃项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21431311/