2011-08-24 5 views
19

Po przesłaniu formularza widzę datę wysłania pocztą. Jednak nie zapisuje daty. Jeśli zrobię randkę, oznacza to, że nie jest w odpowiednim formacie. Oto moja funkcja wyboru daty, wyświetla prawidłowo:Szyny 3 data wyboru jquery data nie zapisywanie do bazy danych

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

$ j dlatego używam prototyp jak dobrze więc wszystkie połączenia jquery używasz zmiennej noconflict.

Oto wpis:

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

Więc wysyła datę w porządku, ale szyny nie wydaje się podoba formatu. Wstawia pustą wartość do bazy danych. Gdybym złożyć go z domyślnym datefield z upadków upuść go wysyła te i zapisuje w porządku:

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

W INSERT wstawia datę jako: '2011-06-22'

robi Szyny oczekiwać datę w 3 zmiennych do poprawnie skonstruować format daty? Jak mogę uzyskać datepicker, aby wysłać prawidłowy format daty?

Z góry dziękuję,

Odpowiedz

36

Wpadłem na ten sam problem. Jednym z rozwiązań jest po prostu zmienić format że datepicker zastosowań:

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

Rails wydaje się być w stanie obsłużyć format rr-mm-dd - używam tego i mam żadnych problemów oszczędzając datę do Baza danych. Jedyny problem polega na tym, że niektórzy mogą uznać format yy-mm-dd za nieco mniej atrakcyjny niż mm/dd/rrrr ...

+0

Dzięki, to było to. – Xaxum

+2

Wysłano rozwiązanie, w którym użytkownik widzi w jedną stronę i przesyła prawidłowy format z hidden_field. Jeszcze raz dziękuję za wskazanie oryginalnego problemu, ponieważ widziałem gdzie indziej, że szyny zamieniłyby datę. – Xaxum

+0

tylko dla osób o tym samym problemie nazwa parametru to 'format', a nie' dateFormat'. – Viro

20

Jak zauważył @BaronVonBraun powyżej szyn nie obsługuje tego formatu. Zmiana, zgodnie z sugestią, zadziałała. Jednak dla osób, które chcą mieć inny format niż yy-mm-dd, możesz skorzystać z poniższego. Użytkownik widzi żądany format, a szyny pobierają wymagany format.

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

show_date jest id pola widzą i mile_date jest ukryte pole z potrzebami data szynach.

Oto 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

Jeśli ktoś korzysta z jquery_datepicker gem, będziemy chcieli użyć czegoś podobnego do następującego kodu Zdaniem szyny.

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

Można również użyć form.datepicker_input dołączyć wyboru daty bezpośrednio do formy, ale w moim przypadku użycia, chciałem wyboru daty, aby odzwierciedlić zlokalizowaną datę, która Rails nie zaakceptować. Dodałem więc ukryty element formularza i ustawiłem dla niego alternatywne pole, działa idealnie!

0

Kinda od hacky ale popełnił pomocnika ustawione rzeczy prosto kiedy wiem Podaję daty serwera w formacie dd-mm-yy

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