Rails:使用text_field中的value设置日期时间列



我的问题类似于另一个关于将数据从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
      });
    })

相关内容

  • 没有找到相关文章

最新更新