【问题标题】:Rails 3 jquery date picker date not saving to databaseRails 3 jquery日期选择器日期未保存到数据库
【发布时间】:2011-08-24 19:35:27
【问题描述】:

当我提交表单时,我可以在帖子中看到发送到的日期。但是,它不保存日期。如果我进行日期检查,它会说它的格式不正确。这是我的日期选择器功能,它显示正常:

    $j(function(){
    $j("#mile_date").datepicker();
});

$j 是因为我也在使用原型,所以所有 jquery 调用都使用 noconflict 变量。

这是帖子:

 Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"Fj4HW/B4EOan/vcPZLJ75TvWkRH4ZKSFsPLlQLSD0cI=", "mile"=>{"odometer"=>"", "trip"=>"428.2
", "gallons"=>"24.959", "note"=>"", "temperature"=>"", "date"=>"06/22/2011"}, "commit"=>"Create Mile"}

所以它可以很好地发送日期,但 rails 似乎不喜欢这种格式。它在数据库中插入一个空值。如果我使用带有下拉列表的默认日期字段提交它,它会发送并保存良好:

    Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"Fj4HW/B4EOan/vcPZLJ75TvWkRH4ZKSFsPLlQLSD0cI=", "mile"=>{"odometer"=>"", "trip"=>"428.2
", "gallons"=>"24.959", "mpg"=>"17.156136063144", "note"=>"", "temperature"=>"", "date(1i)"=>"2011", "date(2i)"=>"6", "date(3i)"=>"22"}, "c
ommit"=>"Create Mile"}

在插入语句中,它将日期插入为:'2011-06-22'

Rails 是否期望 3 个变量中的日期能够正确构造日期格式?如何让日期选择器发送正确的日期格式?

提前谢谢你,

【问题讨论】:

    标签: ruby-on-rails-3 jquery-ui-datepicker


    【解决方案1】:

    我遇到了同样的问题。一种解决方案是简单地更改日期选择器使用的格式:

    // in your javascript...
    $j(function(){
      $j("#mile_date").datepicker({
        dateFormat: "yy-mm-dd"
      });
    });
    

    Rails 似乎能够处理 yy-mm-dd 格式 - 我正在使用它,并且在将日期保存到数据库时没有问题。这里唯一的问题是,有些人可能会发现 yy-mm-dd 格式比 mm/dd/yyyy 看起来不太好看...

    【讨论】:

    • 发布了一个解决方案,用户可以看到一种方式,而您使用 hidden_​​field 提交正确的格式。再次感谢您指出原始问题,因为我在其他地方看到 rails 会转换日期。
    • 仅针对遇到相同问题的人,参数名称为format 而不再是dateFormat
    【解决方案2】:

    正如@BaronVonBraun 所指出的那样,rails 似乎无法处理这种格式。按照他的建议改变它是有效的。但是,对于那些想要不同于 yy-mm-dd 格式的人,您可以使用以下内容。用户看到你想要的格式,而 rails 得到它需要的格式。

    $j(function(){
        $j("#show_date").datepicker({altField: '#mile_date', altFormat: 'yy-mm-dd'});
    });
    

    show_date 是他们看到的字段的 id,mile_date 是一个隐藏字段,其中包含日期栏需要。

    这里是documentation

    【讨论】:

      【解决方案3】:

      如果有人在使用 jquery_datepicker gem ,您将需要在 Rails 视图中使用类似于以下代码的内容。

      <%= form.hidden_field(:ship_date, :id => "ship_date") %>   
      <%= datepicker_input(:show_date, item.id, :size => 10, altField: "#ship_date", altFormat: 'yy-mm-dd', :value => item.ship_date.strftime("%m/%d/%Y"))%>
      

      您也可以使用form.datepicker_input 将日期选择器直接附加到表单,但在我的用例中,我希望日期选择器反映本地化的日期,Rails 不会接受。所以我添加了一个隐藏的表单元素并为其设置了备用字段,效果很好!

      【讨论】:

        【解决方案4】:

        或尝试 delocalize gem:https://github.com/clemens/delocalize

        【讨论】:

          【解决方案5】:
          j('.jquery-calendar').datepicker().each(function(){
            // convert dates from db to US format
            var $input = j(this)
            var found = $input.val().match(/^(\d{4})-(\d{2})-(\d{2})$/);
            if(found){
              $input.val(found[2]+'/'+found[3]+'/'+found[1]);
            }
          });
          

          【讨论】:

            【解决方案6】:

            有点 hacky,但当我知道我以 mm-dd-yy 格式提供服务器日期时,我帮了忙把事情搞定

            def convert_to_y_m_d(date)
              new_date = date.split("-")[2] + "-" + date.split("-")[0] + "-" + date.split("-")[1]
              new_date
            end
            

            【讨论】:

              猜你喜欢
              • 2014-07-09
              • 1970-01-01
              • 2019-11-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多