Rails 3.1 text_field form helper et le format de date jpu

J’ai un champ de formulaire dans ma vue Rails comme ceci:

 "datepicker" %> 

Une fonction javascript convertit tous les champs d’entrée de cette classe en un datepicker jQueryUI.

 $(".datepicker").datepicker({ dateFormat : "dd MM yy", buttonImageOnly : true, buttonImage : "", showOn : "both", changeMonth : true, changeYear : true, yearRange : "c-20:c+5" }) 

Jusqu’ici tout va bien. Je peux éditer la notice et la date est conservée correctement jusqu’au DB. Mon problème est quand je veux éditer à nouveau l’enregistrement. Lorsque le formulaire est pré-rempli à partir de l’enregistrement, il s’affiche au format “aaaa-mm-jj”. Le javascript uniquement met en forme les dates sélectionnées dans le contrôle datepicker. Est-il possible de formater la date extraite de la firebase database? A quel stade puis-je faire cela?

Merci, Dany.

Quelques détails supplémentaires suite à la discussion ci-dessous, mon formulaire est réparti sur deux fichiers, une vue et une partielle. Voici la vue:

  "put") do %>    f %>     

Et voici la vue partielle de _fields :

 

"datepicker" %>

Code du contrôleur:

 def edit_individual @shows = Show.find(params[:show_ids]) end 

J’ai ajouté ce qui suit dans environment.rb :

 Date::DATE_FORMATS.merge!( :default => "%d %B %Y" ) 

Maintenant, il affiche le bon format lorsque j’utilise @ show.date dans la vue, mais l’assistant de formulaire affiche toujours le format brut.

JQuery datepicker ne formate pas la date préremplie.
Vous devez le gérer côté rails en utilisant la date formatée avec le champ de texte au lieu de la date brute qui a le format par défaut ‘aaaa-mm-jj’.

Exemple –

 <%= f.text_field :date, :class => "datepicker", :value => @model.date.strftime("%d %m %Y") %> 

Plus d’exemples au format de date @ Rails dans un champ de texte

RESOLU: je passe dans le :value => show.date comme suggéré par Jayendra ci-dessus. Cela ne fonctionnait pas parce que je n’avais pas transmis l’object show de la vue parent. J’ai changé la ligne de render pour l’inclure – la vue parente ressemble maintenant à ceci:

 <%= form_tag("/shows/update_individual", :method => "put") do %> <% for show in @shows %> <%= fields_for "shows[]", show do |f| %> <%= render "fields", :f => f, :show => show %> <% end %> <% end %> <%= submit_tag "Submit"%> <% end %> 

Si vous utilisez la firebase database MySQL, vous pouvez formater la date dans la requête elle-même.

Exemple de code

  date_format(date_field,"%d %m %y") 

Ce que j’ai fini par faire est simplement de créer une entrée de texte normale et de la pré-remplir avec une date au format ISO et des informations supplémentaires pour la marquer comme une entrée de date (par exemple, rel = “date”).

Du côté du client, j’ai JavaScript pour créer une nouvelle entrée masquée qui prend le nom du champ d’origine (en la remplaçant ainsi, par mesure de précision, j’efface également la propriété name de l’original). Le datepicker est attaché au champ d’origine et utilise altField / altFormat pour synchroniser le champ masqué avec une date ISO.

 // used in jQuery's .each function create_datepicker_for(_, el) { var e = $(el), mirror, date; // attach a hidden field that mirrors the proper date mirror = $('') .prop('name', e.prop('name')) .insertAfter(e); if (e.val()) { date = new Date(e.val()); } e .prop('name', '') /* make sure this is not sent to the application */ .datepicker({ altField: mirror, /* "mirror" is the hidden field */ altFormat: 'yy-mm-dd' /* you do not want anything but ISO */ }); if (date) { e.datepicker('setDate', date) } } 

Cela semble tout synchroniser, envoie le format de date approprié à l’application et le dégrade comme tout le monde s’y attendrait.