Как стать автором
Поиск
Написать публикацию
Обновить

Работа с datetime_select и time_select при использовании опции: minute_step

Время на прочтение2 мин
Количество просмотров602
Хелперы datetime_select и time_select используются для генерации блока dropdown-полей выбора даты и времени (или только времени) внутри формы. По умолчанию минуты выводятся от 00 до 59 с шагом 1.

Зачастую такая точность не нужна, а кроме того, неудобно использовать выпадающий список из 60 значений. Параметр :minute_step позволяет указать нужный нам шаг изменения значения минут.

Как многое в Rails, эти хелперы обладают некоторым уровнем “интеллекта”—для значения “по умолчанию” они используют текущее дату и время (если вы не указали :include_blank => true). И вот с этим есть небольшая проблема. О ней и ее решении читаем ниже.

В чем проблема?



Она в том, что при использовании опции :minute_step значение минут округляется до 00, если переданное в хелпер значение времени не кратно значению :minute_step. Таким образом, указав :minute_step => 5 мы получим эффект невозможности отобразить 42 минуты.

Понятно, что если ваше приложение “считает” минуты с некоторым шагом, то и значения минут будут также кратны этому шагу. Но что делать при операции создания записи? Т.е. когда устанавливается текущее время, а это невсегда кратно шагу.

Допустим шаг у нас 5 минут, а текущее время 15:42, тогда в форме создания записи вы увидите время 15:00, и нужно будет кликать и выбирать ближайшее удобное значение (40 или 45 минут). Это невсегда удобно.
Вариант решения?

Один из вариантов—округлить значение текущего времени до точки кратной нашему шагу. В коде это будет выглять вот так:

<%= datetime_select :created_at, :default => (Time.current.min % 5).minutes.ago(Time.current), :minute_step => 5 %>

или для time_select

<%= time_select :created_at, :default => (Time.current.min % 5).minutes.ago(Time.current), :minute_step => 5 %>

Таким образом мы всегда будем иметь в полях ввода минут ближайшее к удобному для нас значение.

Приятной работы!

Материал из блога Hash Train
Теги:
Хабы:
Всего голосов 4: ↑1 и ↓3-2
Комментарии0

Публикации

Ближайшие события