在我的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)
Als你可以看到,只有project3完全在这个月完全落下,其他只是部分落入,但所有都应该被认为是活跃的。如何使用这些重叠的start和end_dates来获取它们?
你不能只使用Date.today
,因为我也可以在过去或将来问这个月。
答案 0 :(得分:2)
如果项目的开始日期是在月末或之前,并且其结束日期是在月初或之后,则项目处于活动状态。
然后:
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)
答案 1 :(得分:0)
使用where
中的Model
功能。
Project.where("start_date>= :day_on_month AND start_date<= :day_on_month ", { day_on_month: Time.now })