получение входных данных и сравнение того же формата, что и у Date.current rails

#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")
  

Счастливого кодирования 🙂