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)
: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)