К вашему сведению, в первоначальном описании этого вопроса есть некоторое совпадение с вопросом , который я задал вчера , но вопрос другой.
В моем приложении есть пользователи, у которых есть сезонные продукты. Когда пользователь выбирает продукт, мы позволяем ему также выбрать сезон продукта. Мы достигаем этого, позволяя ему выбрать дату начала и дату окончания каждого продукта.
Мы используем date_select
для создания двух наборов раскрывающихся списков: один для даты начала и один для даты окончания.
Включая годы не имеет смысла для нашей модели. Поэтому мы используем опцию: discard_year => true
Когда вы используете discard_year => true
, Rails устанавливает год в базе данных, он просто не отображается в представлениях. В нашем приложении Rails устанавливает все годы на 0001 или 0002. Да, мы могли бы сделать это 2009 и 2010 или любую другую пару. Но дело в том, что мы хотим, чтобы месяцы и дни функционировали независимо от конкретного года. Если бы мы использовали 2009 и 2010 годы, то эти даты были бы неправильными в следующем году, потому что мы не ожидаем, что эти записи будут обновляться каждый год.
Моя проблема заключается в том, что нам необходимо динамически оценивать доступность продуктов на основе их отношения к текущему месяцу. Например, предположим, что это 15 марта. Независимо от года мне нужен метод, который мог бы сказать мне, что продукт, доступный с октября по январь, сейчас недоступен.
Если бы мы использовали реальные годы, это было бы довольно просто.
Например, в модели продуктов я могу сделать это:
def is_available?
(season_start.past? && season_end.future?)
end
Я также могу оценить start_date
и end_date
против current_date
Однако в настройке, которую я описал выше, где у нас есть произвольные годы, которые имеют смысл только по отношению друг к другу, эти методы не работают. Например, is_available?
вернет false для всех моих продуктов, потому что их конечная дата - 0001 или 0002.
Что мне нужно, так это метод, подобный тем, которые я использовал в качестве примеров выше, за исключением того, что они сравниваются с current_month
вместо current_date
и прошлым? и будущие месяцы вместо лет.
Я понятия не имею, как это сделать или есть ли в Rails какие-либо встроенные функции, которые могут помочь. Я изучил все методы / помощники по дате и времени в документации по API, но я не вижу ничего эквивалентного тому, что я описываю.
Спасибо.