我的表中有两列,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框架,因为一些较旧的问题得到了解答。
答案 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'
});
});