У меня есть поле birth_date, которое хранится как значение datetime. Помощники по умолчанию для рельсовых форм выкладывают не слишком дружественный формат, например «2008-06-10 22: 33: 19.000000». Ниже путь ванильных рельсов.
<div class="field">
<%= f.label :birth_date %>
<%= f.text_field :birth_date, :size=>"20" %>
</div>
Как я могу просто применить формат? Я пробовал разные подходы, например, strftime должен работать, подумал я. Но когда я пытаюсь сделать следующее, я получаю сообщение об ошибке undefined method 'strftime' for nil:NilClass
<div class="field">
<%= f.label :birth_date %>
<%= f.text_field :birth_date, :value=>f.object.birth_date.strftime('%m/%d/%Y'), :size=>"20" %>
</div>
Основываясь на некоторых других вопросах / ответах, я попробовал следующее. Он работает для ненулевых значений, но это некрасивый код и не работает для пустых значений (фактически он показывает сегодняшнюю дату).
<div class="field">
<%= f.label :birth_date %>
<%= f.text_field :birth_date, :value=> Time.parse(f.object.birth_date.to_s).strftime('%m/%d/%Y'), :size=>"20" %>
</div>
При воспроизведении кажется, что вывод f.object.birth_date рассматривается как дата, а не как дата / время. Однако при отображении в поле text_ (оригинальное, безобразное форматирование) оно включает время. Сегодня пятница, и мое общее отсутствие знакомства с рельсами и рубиновыми объектами даты / времени заставляет меня чувствовать себя глупо.
Есть ли простой способ заставить мою форму ничего не отображать, если она пуста или пуста, и дружественную дату в противном случае?