我有一个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时显示任何内容,否则会显示友好日期?
答案 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。它会起作用,但是在将属性应用到对象之前,需要先从表单中解析输入。