2011-08-24 56 views
19

当我提交我的表单时,我可以看到在帖子中发送的日期。但是,它不保存日期。如果我做了日期检查,表示它的格式不正确。这里是我的日期选择器功能,它显示罚款:Rails 3 jquery日期选择器日期不保存到数据库

$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"} 

所以它发出的日期罚款,但轨道似乎并不喜欢的格式。它向数据库中插入一个空值。如果我用它发送这和下拉菜单中默认的DateField提交保存罚款:

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"} 

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

不滑轨预计3个变量的日期正确构建日期格式?如何让日期选择器发送正确的日期格式?

谢谢你在前进,

回答

36

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

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

的Rails似乎能够处理YY-MM-DD格式 - 我使用时遇到任何问题保存日期到数据库。这里唯一的问题是,有些人可能会发现yy-mm-dd的格式比mm/dd/yyyy好一点。

+0

谢谢,仅此而已。 – Xaxum

+2

发布了一个解决方案,用户可以看到一种方式,并用hidden_​​field提交适当的格式。再次感谢指出原来的问题,因为我在别处看到rails会转换日期。 – Xaxum

+0

只适用于在同一问题中运行的人,参数的名称是'format'而不是'dateFormat'了 – Viro

20

正如上面的rails上的@BaronVonBraun所指出的,似乎并不处理这种格式。改变它,因为他建议工作。但是,对于那些想要与yy-mm-dd格式不同的用户,可以使用以下内容。当rails获得所需的格式时,用户会看到你想要的格式。

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

的SHOW_DATE是他们看到现场的id和mile_date与日期Rails需要的隐藏字段。

这是documentation

0
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]); 
    } 
}); 
1

如果有人使用jquery_datepicker gem,你要使用类似下面的代码的东西在你的轨道查看。

<%= 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不会接受。所以我添加了一个隐藏的表单元素并为其设置备用字段,完美地工作!

0

还挺哈克但做帮手直组的事情,当我知道我给服务器日期在MM-DD-YY格式

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