У меня были похожие проблемы с атрибутами / полями времени. Таким образом, можно следовать этому:
http://railscasts.com/episodes/32-time-in-text-field
И это работает довольно хорошо.
Но я покопался и нашел другое интересное решение. Вроде уродливой обезьяньей повязки, но в некоторых случаях она может быть более полезной, чем та, что была сделана на Railscasts.
Итак, у меня есть модель со столбцом с именем time
(ofc она имеет тип времени). Вот мое решение:
after_initialize :init
private
def init
unless time.nil?
@attributes['time'] = I18n.l(time, format: :short)
end
end
Как видите, я форматирую переменную, которая будет возвращена методом time_before_type_cast
. Таким образом, я правильно отформатировал время при вводе текста (отображается FormBuilder
), но если пользователь вводит что-то неправильное, например 10;23
, у меня все еще есть это, и в следующем запросе оно будет отображаться FormBuilder::text_field
. Таким образом, у пользователя есть возможность исправить свою жалкую ошибку.