Rails:text_field的人性化日期格式

Ben*_*ris 8 ruby datetime ruby-on-rails

我有一个birth_date字段,存储为日期时间值.默认的rails形式帮助者吐出一种不太友好的格式,例如"2008-06-10 22:33:19.000000".以下是香草铁路的方式.

<div class="field">
  <%= f.label :birth_date %>
  <%= f.text_field :birth_date, :size=>"20" %>
</div>
Run Code Online (Sandbox Code Playgroud)

我怎样才能简单地应用格式?我试过各种方法,例如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>
Run Code Online (Sandbox Code Playgroud)

基于其他一些问题/答案,我尝试了以下内容.它适用于非空值,但它是丑陋的代码,并且它不适用于空值(实际上它显示今天的日期).

<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>
Run Code Online (Sandbox Code Playgroud)

在游戏中,似乎输出f.object.birth_date被视为日期,而不是日期时间.但是,当在text_field(原始,丑陋的格式)中显示时,它包含时间.星期五下午,我对铁轨形式和红宝石日期/时间对象的熟悉程度让我觉得很愚蠢.

任何简单的方法来让我的表单显示空/空白,否则一个友好的日期?

Cla*_*law 10

如果你想有一个空字符串,如果birth_date是空的,你应该简单地检查birth_date是不可nil事先:

<%= f.text_field :birth_date, :value => (f.object.birth_date.strftime('%m/%d/%Y') if f.object.birth_date), :size => "20" %>
Run Code Online (Sandbox Code Playgroud)

这样,当birth_date是nil,:value被设置为nil.