#ruby-on-rails
#ruby-on-rails
Вопрос:
вот форма
<div class="field form-group">
<h6><%= form.label :start_date %></h6>
<div class="input-group">
<%= form.date_field :start_date, class: "form-control form-input", required: true %>
</div>
</div>
при печати начальной даты она печатается в следующем формате
2020-10-15 00:00:00 UTC
я хочу, чтобы он был в формате Date.current, т.е. 2020-10-15, чтобы я мог сравнить его с Date.current
Ответ №1:
Плохая идея
Не храните форматированные строки в базе данных, поскольку вы уничтожаете моделирование данных, чтобы решить тривиальную проблему форматирования, которая должна быть решена в приложении.
Это действительно так просто, как:
Thing.start_date.stftime('%Y-%m-%d')
Существует также множество других, более элегантных способов, таких как вспомогательные методы и декораторы.
Используйте фактические столбцы типа timestamp / date / time, которые подходят для вашей базы данных и домена.
Если вы храните даты / время в виде строк / целых чисел или чего-то еще глупого, вы (и любой бедный человек, который должен поддерживать ваше чудовище) заплатите за это очень дорого при запросе данных, поскольку вы не можете фактически использовать их в качестве даты без приведения.
Например, это:
Thing.where(start_date: to..from)
Превращается в монстра:
# This code will only work on Postgres...
Thing.where("TO_DATE(start_date, 'YYYY-MM-DD') BETWEEN ? AND ?", to, from)
Ответ №2:
если вы хотите получить дату в определенном формате, пожалуйста, используйте strftime
метод. Ссылка: strftime
В вашем случае используйте так:
obj.start_date.strftime("%Y-%m-%d")
Счастливого кодирования 🙂