我的问题类似于另一个关于将数据从text_field放入datetime列的问题。看来,我需要把数据放入text_field在一个特定的顺序或rails不会接受它。问题是,我不能总是控制用户输入数据的方式。事实上,因为我刚刚添加了一个JQuery日期拾取器,所以用户输入的值几乎总是错误的。
我想我可以用Date。parse或Time。parse或DateTime。与setter方法一起解析(在railscast 32中提到,但这似乎也不适合我。我一直得到一个参数超出范围的错误,这似乎也是由于输入格式错误。
还有人使用JQuery日期选择器来填写日期的文本字段吗?你需要向你的模型或控制器添加什么魔法才能使其工作?为什么这么难?
我使用tim时效gem来克服这个问题,并以我想要的格式提交日期。除了时间性,我还使用了validates_tim及时性来验证日期和时间,也就是说,它不是在未来或任何东西。
要使用time时效gem解析字符串'MM/DD/YYYY',您可以这样做:
Timeliness.parse(params[:my_date], :format => 'mm/dd/yyyy')
时间和日期解析器虽然接受各种各样的格式,但无论如何都无法计算出您经过的任何时间段。如果你得到超出范围的错误,这意味着你使用的格式是无效的。
您可以控制jQuery Datepicker使用的格式,并选择一个时间解析器不会出错的格式。默认的MM/DD/YYYY应该可以正常工作,但是您传递的是什么格式?
如果在保存对象之前切换月份和日期字段怎么办?你可以用jquery/javascript做一个onsubmit的事情,或者只是使用一个date_select_tag,并在保存对象之前在控制器中移动你认为合适的参数。
除此之外,日期格式可能有rails的默认设置。不确定是否要更改整个应用程序的日期格式
问题是rails/activerecord期望日期是ISO格式的'yyyy-mm-dd'。但这不是一个用户友好的格式
在我看来,最简单的解决方案是在日期选择器上使用alt属性——基本上,显示一个日期格式,但提交另一个日期格式:
= f.text_field :your_date, id: "your_date", class: "hidden" // This is hidden
// This will show up
= text_field_tag "date[something_we_will_not_use]", f.object.your_date.strftime("%m/%d/%Y"),
class: "datepicker", 'data-alt-field' => '#your_date'
<<p> Datepicker初始化/strong> $('.datepicker').each(function() {
var alt_field = $(this).attr('data-alt-field');
$this.datepicker({
dateFormat: "mm/dd/yy",
prevText: '<i class="fa fa-chevron-left"></i>',
nextText: '<i class="fa fa-chevron-right"></i>',
altField: alt_field, // This is the tag where the date will be filled
altFormat: "yy/mm/dd" // This is how the date will be posted to your controller
});
})