Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails 3.1文本字段表单帮助器和jQuery日期选择器日期格式_Jquery_Jquery Ui_Ruby On Rails 3.1 - Fatal编程技术网

Rails 3.1文本字段表单帮助器和jQuery日期选择器日期格式

Rails 3.1文本字段表单帮助器和jQuery日期选择器日期格式,jquery,jquery-ui,ruby-on-rails-3.1,Jquery,Jquery Ui,Ruby On Rails 3.1,我在Rails视图中有一个表单字段,如下所示: <%= f.text_field :date, :class => "datepicker" %> <%= form_tag("/shows/update_individual", :method => "put") do %> <% for show in @shows %> <%= fields_for "shows[]", show do |f| %>

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

<%= f.text_field :date, :class => "datepicker" %>
<%= 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 %>
控制器代码:

def edit_individual
    @shows = Show.find(params[:show_ids])
  end
我在
环境.rb中添加了以下内容:

Date::DATE_FORMATS.merge!(
  :default => "%d %B %Y"
)

现在,当我在视图中使用@show.date时,它显示了正确的格式,但是表单帮助程序仍然显示原始格式。

JQuery datepicker不会格式化预填充的日期。
您需要在rails端通过将格式化日期与文本字段一起使用来处理它,而不是使用默认“yyyy-mm-dd”格式的原始日期

示例-

<%= f.text_field :date, :class => "datepicker", :value => @model.date.strftime("%d %m %Y") %>
“日期选择器”:value=>@model.date.strftime(“%d%m%Y”)%%>

更多示例@

如果您使用的是mysql数据库,您可以在查询本身中格式化日期

示例代码

     date_format(date_field,"%d %m %y")

已解决:我传入上面Jayendra建议的
:value=>show.date
。它不起作用的原因是我没有从父视图传入
show
对象。我更改了
渲染
行以包含它-父视图现在如下所示:

<%= f.text_field :date, :class => "datepicker" %>
<%= 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 %>
“put”)do%>
f、 :show=>show%>

我最后做的就是创建一个普通文本输入,并用ISO格式的日期和附加信息预填充它,将其标记为日期输入(比如,rel=“date”)

在客户端,我使用JavaScript创建一个新的隐藏输入,该输入采用原始字段的名称(因此覆盖它,为了更好地衡量,我还删除了原始字段的name属性)。日期选择器附加到原始字段,并使用altField/altFormat将隐藏字段与ISO日期同步

//在jQuery中使用。每个
函数create_datepicker_for(_,el){
变量e=$(el),
镜子,
日期;
//附加反映正确日期的隐藏字段
镜像=$('')
.prop('name',e.prop('name'))
.在(e)之后插入;
如果(e.val()){date=新日期(e.val());}
E
.prop('name','')/*确保未将其发送到应用程序*/
.日期选择器({
altField:mirror,/*“mirror”是隐藏字段*/
altFormat:'yy-mm-dd'/*您只需要ISO*/
});
if(date){e.datepicker('setDate',date)}
}

这似乎可以使所有内容保持同步,将正确的日期格式发送到应用程序,并像任何人期望的那样降级。

是的,我意识到了这一点,但我不确定如何格式化数据库中的日期…添加了一个示例。在助手或模型端,会有更优雅的方法来处理它。我收到一个错误,因为
@date
为零。如何获取表单助手当前引用的记录?@date就是一个例子。您可能需要使用模型对象“@model.date”。在使用strtime方法之前需要检查nil。向模型本身添加了一个formatteddate方法,可以执行上述操作。我尝试了
@model
,但没有成功,我得到了#``的
未定义的方法。也尝试了@model\u实例,但没有结果。。。
<%= 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 %>