2

Je travaille sur un projet de rails pour un site web australien. Par conséquent, ils veulent être en mesure d'entrer des formats de date dans la norme européenne de «jj/mm/aaaa» plutôt que dans le format «mm/jj/aaaa» centré sur les États-Unis. J'ai un modèle ActiveRecord avec un champ Date. J'utilise le sélecteur de date de jQuery pour fournir la date sélectionnée sur un champ de texte, et je le mets à un format approprié. Mais quand j'essaie de sauvegarder le disque, la date est erronée. Même lorsque j'ai défini les formats de date personnalisés dans un intializer selon le guide i18n.Rails ActiveRecord analyse de date pour i18n (formats de date spécifiquement européens)

>> b = BlogPost.new 
>> b.posted_on = '20/07/2010' 
=> "20/07/2010" 
>> b.posted_on 
=> nil 
>> b.posted_on = '07/20/2010' 
=> Tue, 20 Jul 2010 

Il semble que Rails n'utilise que Date.parse pour convertir la chaîne en un objet Date. Est-il possible de résoudre ce problème pour l'ensemble du projet? Je ne veux pas avoir à écrire du code personnalisé pour chaque modèle.

Répondre

2
class Date 
    class << self 
    def _parse_with_us_format(date, *args) 
     if date =~ %r{^(\d+)/(\d+)/(\d+)$} 
     _parse_without_us_format("#{$3.length == 2 ? "20#{$3}" : $3}-#{$1}-#{$2}", *args) 
     else 
     _parse_without_us_format(date, *args) 
     end 
    end 
    alias_method_chain :_parse, :us_format 
    end 
end 
+0

solution fonctionne et est simple. Si vous avez besoin de solutions plus inclusives, voyez [délocaliser] (https://github.com/clemens/delocalize) ou [i18n_alchemy] (https://github.com/carlosantoniodasilva/i18n_alchemy). – Mike