rails:使用text_field中的值设置datetime列

时间:2011-07-21 21:45:09

标签: ruby-on-rails datetime

我的问题类似于another one关于将text_field中的数据放入日期时间列。看来我需要按特定顺序将数据放入text_field,否则rails不会接受它。事实是,我不能总是控制用户输入数据的方式。事实上,由于我刚刚添加了一个JQuery日期选择器,用户输入的值几乎总是错误的。

我以为我可以使用Date.parse或Time.parse或DateTime.parse以及一个setter方法(在railscast 32中提到但是这对我来说似乎也没有用。我一直在争论超出范围的错误,这似乎也是由于输入格式错误。

是否有其他人使用JQuery日期选择器填写日期的文本字段?你需要添加什么神奇的模型或控制器来使其工作?为什么这么难?

4 个答案:

答案 0 :(得分:0)

时间和日期解析器在接受各种格式时无法确定您通过的任何时间段,无论如何。如果超出范围错误,则表示您使用的格式无效。

您可以控制jQuery Datepicker使用的格式,并选择时间解析器不会出错的格式。默认的MM / DD / YYYY应该好好思考,你传递的是什么格式?

答案 1 :(得分:0)

我使用timeliness gem来克服这个问题,并以我想要的格式提交日期。除了及时性,我还使用validates_timeliness来验证日期和时间,即它不是将来或​​任何事情。

使用timeliness gem解析字符串'MM / DD / YYYY':

Timeliness.parse(params[:my_date], :format => 'mm/dd/yyyy')

答案 2 :(得分:0)

如果在保存对象之前切换月份和日期字段,该怎么办?您可以使用jquery / javascript执行onsubmit事务,或者只是使用date_select_tag并在保存对象之前在控制器中移动params。

除此之外,日期格式可能有一个rails默认设置。不确定是否要改变整个应用程序的日期格式。

答案 3 :(得分:0)

问题是rails / activerecord期望日期为ISO格式'yyyy-mm-dd'。但这不是一个用户友好的格式

我认为最简单的解决方案是在datepicker上使用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'

Datepicker初始化

$('.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
      });
    })