在一个月内获得所有活跃的项目

时间:2014-01-29 12:35:17

标签: ruby-on-rails

在我的Rails应用中,我的项目包含start_dateend_date。现在我创建了一个名为active_projects的方法,它可以检索特定月份内的所有项目。我可以使用2个参数monthyear来调用该方法,如下所示:

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,因为我也可以在过去或将来问这个月。

2 个答案:

答案 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 })