(Il mio problema è più o meno lo stesso di described in this question, solo che la risposta non funziona nel mio caso.)Rails3/jQuery UI Datepicker - mese e giorno vengono invertiti su Salva
sto usando il jQuery UI Datepicker in un'applicazione Rails con db Postgres. L'implementazione predefinita utilizza un formato data mm/gg/aa per visualizzare la data selezionata, che è esattamente ciò che voglio. Tuttavia, dopo aver salvato il record nel database, il mese e il giorno vengono invertiti, quindi viene visualizzato come aa-gg-mm. Quindi selezionare 3/11/2012 tenta di salvare come 3 novembre anziché 11 marzo e una data come 31/3/2012 non viene salvata affatto, perché non esiste.
Sono andato giù 3 strade diverse finora cercando di risolvere questo problema:
1) Primo tentativo è stato quello di riformattare il campo di testo in modo che la visualizzazione sembrava come volevo:
<%= f.text_field :foo, :value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')), class: "datepicker" %>
Questo visualizzato 31/03/2012 inizialmente correttamente, ma ancora invertito durante il salvataggio.
2) Così dopo ho provato a cambiare il modo di default che le date sono memorizzate, pensando che avrebbe aggirare il problema. Come descritto nella risposta alla this question, ho aggiunto quanto segue al config/locali/en.yml:
# config/locales/en.yml
en:
date:
formats:
default: "%m/%d/%Y"
Questo non ha fatto alcuna differenza a tutti. Poi ho trovato this question e cercato di creare config/initializers/date_formats.rb con queste righe:
Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
Idem come sopra, nessuna differenza.
3) Dopo aver giocato con molte combinazioni, l'unica cosa che ho trovato che il lavoro DID stava specificando il formato aaaa-mm-g nella mia chiamata al plugin datepicker - è l'opposto di quello che volevo, ma almeno le date possono essere salvate correttamente. Quindi la chiamata datepicker simile a questo:
$(".datepicker").datepicker({ dateFormat: 'yy-mm-dd' });
Selezione 31 marzo dal calendario popola il campo con 2012-03-31, e visualizza ancora come 2012-03-31 dopo il salvataggio.
Ma come diavolo posso ottenere il DatePicker di lavorare con un formato gg/mm/aa? Non riesco a immaginare che sia una cosa difficile da fare, ma cosa mi sfugge? Devo fare qualcosa con come sono archiviate le date in Postgres? (Sono specificati come la data, non datetime.)
Per fermare colpire la testa contro il muro su questo, Ho appena passato i miei campi in "testo" anziché in "data". Non è l'ideale, ma risolve il problema piuttosto semplicemente. – ellawren
alcune volte il passaggio è una buona soluzione, ideale o no. ma ancora per curiosità potresti voler conoscere il problema, potrebbe essere più tardi. –
Rails 3.2.3, Postgresql e Ruby 1.9.3. Avevo il formato datapicker impostato su mm-dd-yy e funzionava da un po ', ma sto passando attraverso un refactoring e posso salvare alcune date senza problemi, ma una data in particolare non viene più salvata. Quindi ho intenzione di riformattare di nuovo a yy-mm-dd e vedrò cosa succede. Aggiornamento – thomasvermaak