Rails 3.1 text_field表单助手和jQuery datepicker日期格式

cod*_*dog 5 jquery jquery-ui ruby-on-rails-3.1

我的Rails视图中有一个表单字段,如下所示:

<%= f.text_field :date, :class => "datepicker" %>
Run Code Online (Sandbox Code Playgroud)

javascript函数将该类的所有输入字段转换为jQueryUI日期选择器.

$(".datepicker").datepicker({
                dateFormat : "dd MM yy",
                buttonImageOnly : true,
                buttonImage : "<%= asset_path('iconDatePicker.gif') %>",
                showOn : "both",
                changeMonth : true,
                changeYear : true,
                yearRange : "c-20:c+5"
            })
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我可以编辑记录,它会将日期正确地保存到数据库中.我的问题是当我想再次编辑记录时.当表单从记录中预先填充时,它以'yyyy-mm-dd'格式显示.javascript只格式化在datepicker控件中选择的日期.有什么办法可以格式化从数据库中检索的日期吗?我可以在哪个阶段这样做?

谢谢,丹妮.

在下面的讨论之后的一些更多细节,我的表单分布在两个文件,一个视图和一个部分.这是观点:

<%= form_tag("/shows/update_individual", :method => "put") do %>
    <% for show in @shows %>
        <%= fields_for "shows[]", show do |f| %>
            <%= render "fields", :f => f %>
        <% end %>
    <% end %>
    <%= submit_tag "Submit"%>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是_fields局部视图:

<p>
    <%= f.label :name %>
    <%= f.text_field :name %>
</p>

<p>
    <%= f.date %>
    <%= f.label :date %>
    <%= f.text_field :date, :class => "datepicker" %>
</p>
Run Code Online (Sandbox Code Playgroud)

控制器代码:

def edit_individual
    @shows = Show.find(params[:show_ids])
  end
Run Code Online (Sandbox Code Playgroud)

我添加了以下内容environment.rb:

Date::DATE_FORMATS.merge!(
  :default => "%d %B %Y"
)
Run Code Online (Sandbox Code Playgroud)

现在它在视图中使用@ show.date时显示正确的格式,但表单助手仍然显示原始格式.

Jay*_*dra 12

JQuery datepicker不会格式化预先填充的日期.
您需要使用带有textfield的格式化日期而不是具有默认"yyyy-mm-dd"格式的原始日期来在轨道侧处理它.

示例 -

<%= f.text_field :date, :class => "datepicker", :value => @model.date.strftime("%d %m %Y") %>
Run Code Online (Sandbox Code Playgroud)

更多示例@Rails在text_field中的日期格式


cod*_*dog 2

:value => show.date已解决:我按照上面 Jayendra 的建议传递了。它不起作用的原因是因为我没有show从父视图传递对象。我更改了该render行以包含它 - 父视图现在看起来像这样:

<%= form_tag("/shows/update_individual", :method => "put") do %>
    <% for show in @shows %>
        <%= fields_for "shows[]", show do |f| %>
            <%= render "fields", :f => f, :show => show %>
        <% end %>
    <% end %>
    <%= submit_tag "Submit"%>
<% end %>
Run Code Online (Sandbox Code Playgroud)