Получение всех активных проектов за месяц

В моем приложении Rails у меня есть проекты с start_date и end_date. Теперь я создал метод, называемый active_projects который возвращает все проекты, относящиеся к этому конкретному месяцу. Я могу назвать этот метод с двумя параметрами, month и year следующим образом:

def self.active_projects(month, year)
 ...
end

Это означает, что любой проект с частью, активной в течение месяца, считается активным. Теперь позвольте сказать, что я хочу получить все активные проекты с февраля 2014 года, и у меня есть эти 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 вы можете видеть, только проект3 полностью падает в этом месяце, остальные только частично, но все они должны считаться активными. Как я могу получить их все с этими перекрывающимися start и end_dates?

И вы не можете просто использовать Date.today, потому что я мог бы также просить об этом в течение месяца в прошлом или в будущем.

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)


Используйте, where функция от Model.

Project.where("start_date>= :day_on_month AND start_date<= :day_on_month ", { day_on_month: Time.now })

licensed under cc by-sa 3.0 with attribution.