Я создаю веб-приложение в Rails 5.
В этом приложении я хочу запросить объект с именем Measure, который имеет атрибут Data_at (datetime). В моем пользовательском интерфейсе я позволяю пользователю выбирать из трех разных периодов (месяц, квартал и год).
Когда они выбирают Месяц следующий, им нужно выбрать, какой месяц (от 1 до 12).
Когда они выбирают Квартал, им нужно выбрать четверть (1,2,3 или 4). Когда они выбирают Год, они должны выбрать, какой год.
Я ищу способ сделать этот запрос на бэкэнде (контроллер и модель) на основе выбранных данных.
Когда я делаю месяц, я думаю, что могу использовать begin_of_month и end_of_month.
Когда я делаю четверть, я думаю, что могу использовать функции rails begin_of_quarter и end_of_quarter, но как будет выглядеть такой запрос. У меня есть данные от пользователя, какой квартал они выбрали (от 1 до 4) и какой год они выбрали.
Это моя текущая попытка.
Запрос
def self.select_data(params)
if params[:period] == "month"
month_dates(params[:month], params[:year])
elsif params[:period] == "quarter"
quarter_dates(params[:quarter], params[:year])
elsif params[:period] == "year"
end
end
Методы модели
def month_dates(month, year)
date = Time.parse("01-#{month}-#{year}")
where(date_at: date.beginning_of_month..date.end_of_month)
end
def quarter_dates(quarter, year)
if quarter == 1
where(date_at: Time.parse("01-01-#{year}")..Time.parse("01-03-#{year}"))
elsif quarter == 2
where(date_at: Time.parse("01-04-#{year}")..Time.parse("01-06-#{year}"))
elsif quarter == 3
where(date_at: Time.parse("01-07-#{year}")..Time.parse("01-09-#{year}"))
elsif quarter == 4
where(date_at: Time.parse("01-10-#{year}")..Time.parse("01-12-#{year}"))
end
end
def year_dates(year)
date = Time.parse("01-01-#{year}")
where(date_at: date.beginning_of_year..date.end_of_year)
end