我有一个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(原始,丑陋的格式)中显示时,它包含时间.星期五下午,我对铁轨形式和红宝石日期/时间对象的熟悉程度让我觉得很愚蠢.
任何简单的方法来让我的表单显示空/空白,否则一个友好的日期?
第1部分:下面的代码似乎工作正常,但必须有更好的方法来做第二行.这是为了显示用户地址.这很简单,如果地址的第二行有内容,我输出它和换行符.
<%= @sponsor.address1 %><br />
<%= raw "#{@sponsor.address2} <br />" unless @sponsor.address2.empty? %>
<%= @sponsor.city %>, <%= @sponsor.state %> <%= @sponsor.zip %>
Run Code Online (Sandbox Code Playgroud)
有没有一些明显的,更优雅的方式来做到这一点?
第2部分:如果价值也可能为零怎么办?我应该在模型中处理吗?是否有一些简单的方法让模型返回空白而不是nil?
将其嵌入另一个条件似乎太乱了.有人能告诉我完成第1部分和/或第2部分的最佳轨道方式吗?