2011-08-24 35 views
19

Khi tôi gửi biểu mẫu của mình, tôi có thể thấy ngày được gửi đến trong bài đăng. Tuy nhiên, nó không lưu ngày tháng. Nếu tôi kiểm tra ngày, nó nói nó không có định dạng đúng. Đây là chức năng chọn ngày của tôi, nó hiển thị tốt:Rails 3 ngày chọn ngày tháng jquery không lưu vào cơ sở dữ liệu

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

$ j là vì tôi đang sử dụng mẫu thử nghiệm nên tất cả các cuộc gọi jquery đều đang sử dụng biến noconflict.

Đây là bài:

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

Vì vậy, nó sẽ gửi các mỹ ngày nhưng đường ray dường như không thích định dạng. Nó chèn một giá trị null vào cơ sở dữ liệu. Nếu tôi gửi nó với DateField mặc định với trầm thả nó sẽ gửi này và tiết kiệm tốt:

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

Trong tuyên bố chèn nó chèn ngày như: '2011-06-22'

Liệu Rails mong đợi ngày trong 3 biến để xây dựng định dạng ngày chính xác? Làm thế nào tôi có thể nhận được datepicker để gửi định dạng ngày chính xác?

Cảm ơn bạn trước,

Trả lời

36

Tôi đã gặp sự cố tương tự. Một giải pháp là chỉ cần thay đổi định dạng mà datepicker sử dụng:

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

Rails dường như để có thể xử lý các định dạng yy-mm-dd - Tôi đang sử dụng đó và đang gặp không có vấn đề tiết kiệm ngày tới cơ sở dữ liệu. Vấn đề duy nhất ở đây là một số có thể tìm thấy định dạng yy-mm-dd trông kém hơn một chút so với dd/mm/yyyy ...

+0

Cảm ơn, đó là nó. – Xaxum

+2

Đăng một giải pháp mà người dùng thấy một cách và bạn gửi định dạng phù hợp với hidden_field. Một lần nữa cảm ơn vì đã chỉ ra vấn đề ban đầu vì tôi thấy ở những nơi khác mà đường ray sẽ chuyển đổi ngày tháng. – Xaxum

+0

chỉ dành cho những người chạy trong cùng một vấn đề, tên của tham số là 'định dạng' và không còn' dateFormat' nữa – Viro

20

Như đã lưu ý bởi @BaronVonBraun phía trên đường ray dường như không xử lý định dạng đó. Thay đổi nó như ông đề nghị làm việc. Tuy nhiên, đối với những người muốn có định dạng khác với yy-mm-dd, bạn có thể sử dụng như sau. Người dùng thấy định dạng bạn muốn trong khi đường ray nhận định dạng cần thiết.

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

Show_date là id của trường họ nhìn thấy và mile_date là trường ẩn với nhu cầu của đường ray ngày.

Đây là 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

Nếu bất cứ ai đang sử dụng jquery_datepicker gem, bạn sẽ muốn sử dụng một cái gì đó tương tự như đoạn mã sau vào xem đường ray của bạn.

<%= 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"))%> 

Bạn cũng có thể sử dụng form.datepicker_input để đính kèm bộ chọn ngày trực tiếp đến hình thức, nhưng trong trường hợp sử dụng của tôi, tôi muốn chọn ngày để phản ánh ngày cục bộ, mà Rails sẽ không chấp nhận. Vì vậy, tôi đã thêm một phần tử biểu mẫu ẩn và đặt trường thay thế cho nó, hoạt động hoàn hảo!

0

Kinda của hacky nhưng làm một helper bộ điều thẳng khi tôi biết tôi đang đưa ra ngày máy chủ theo định dạng mm-dd-yy

def convert_to_y_m_d(date) 
    new_date = date.split("-")[2] + "-" + date.split("-")[0] + "-" + date.split("-")[1] 
    new_date 
end 
Các vấn đề liên quan