Rails日期选择器日期时间的有效格式

时间:2015-10-07 15:48:53

标签: jquery ruby-on-rails

我的表中有两列,start_date和end_date,两者都具有datetime类型。我尝试将text_field与jQuery gem bootstrap-datepicker-rails一起使用,让用户从一个小弹出日历中选择日期。问题是返回的日期不是Ruby期望的格式,因此您最终可能会得到违反模型验证的无效日期。例如,选择2015年10月7日(即2015年10月7日)作为开始日期和2015年10月30日(2015年10月30日)将返回两个错误:1)结束日期不能为空; 2)开始日期必须在之前。

我认为这是因为它实际上以不同的格式解释第二个日期,并且由于一年中显然没有第30个月,因此无法解析日期。我可以通过启动rails控制台并尝试手动输入日期来测试此假设。例如,project = Project.new(number: 7, account_manager: "Test", customer: "Test", start_date: "10/7/2015".to_datetime, end_date: "10/30/2015")会返回以下内容:=> #<Project number: 7, name: nil, customer: "Test", created_at: nil, updated_at: nil, start_date: "2015-07-10 00:00:00", end_date: nil, account_manager: "Test">请注意,end_date字段为nil。

我认为我看到问题的症结所在,但我正努力让这个问题发挥作用。我可以看到,不知何故Rails需要将2015年10月30日输入的日期解释为2015年10月30日,但在将记录保存到数据库之前将其转换为适当的格式。任何人都可以帮助我摆脱这个绊脚石吗?

这是项目模型。     class Project&lt;的ActiveRecord :: Base的         验证:start_date,presence:true         验证:end_date,presence:true         验证:start_date,                    date:{before :: end_date}         验证:客户,在场:真实         验证:数字,存在:真实     端

这是项目/新视图。

<h1>Create New Project</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@project) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= f.label :number, 'Project Number' %>
      <%= f.text_field :number, class: "form-control" %>

      <%= f.label :account_manager %>
      <%= f.text_field :account_manager, class: "form-control" %>

      <%= f.label :customer %>
      <%= f.text_field :customer, class: "form-control" %>

      <%= f.text_field :start_date, class:"datepicker", :value=>      (@project.start_date && @project.start_date.strftime("%m-%d-%Y")), placeholder:"Start Date" %>

      <%= f.text_field :end_date, class:"datepicker", :value => (@project.end_date && @project.end_date.strftime("%m-%d-%Y")), placeholder:"End Date" %>

      <br>
      <%= f.submit "Create project", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

<script type="text/javascript">
  $(document).ready(function(){
    $('.datepicker').datepicker({todayHighlight: true, orientation: 'auto top'});
  });
</script>

最后,我知道有几个问题(例如,"Rails 3.1 text_field form helper and jQuery datepicker date format")已经存在,但我很难得到工作的答案,无论是由于我自己的经验不足还是Rails框架,因为一些较旧的问题得到了解答。

1 个答案:

答案 0 :(得分:3)

尝试切换日期选择器以使用yyyy-mm-dd格式:

http://bootstrap-datepicker.readthedocs.org/en/latest/options.html#format

示例:

$(document).ready(function(){
  $('.datepicker').datepicker({
    todayHighlight: true, 
    orientation: 'auto top', 
    format: 'yyyy-mm-dd'
  });
});