Rails:text_field的人性化日期格式

时间:2011-10-21 20:53:25

标签: ruby-on-rails ruby datetime

我有一个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>

如何简单地应用格式?我试过各种方法,例如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_field(原始,丑陋的格式)中显示时,它包含时间。星期五下午,我对铁轨形式和红宝石日期/时间对象的熟悉程度让我觉得很愚蠢。

任何简单的方法可以让我的表单在null / blank时显示任何内容,否则会显示友好日期?

2 个答案:

答案 0 :(得分: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" %>

这样,当birth_date为nil时,:value设置为nil

答案 1 :(得分:3)

您是否尝试过使用date_select表单生成器帮助程序方法?您也可以使用datetime_select,但看起来您只想在此处使用日期。

<div class="field">
  <%= f.label :birth_date %>
  <%= f.date_select :birth_date %>
</div>

API文档位于:http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-date_select 添加您需要的选项。

我总是使用这种方法,或jQuery UI中的this javascript日期选择器。目前大多数JS框架都有插件。

如果它必须是text_field,请使用人类语言日期解析库,如chronic。它会起作用,但是在将属性应用到对象之前,需要先从表单中解析输入。