2017-08-15 2 views
0

J'essaye de mettre à jour mon application 3.0.5 de rails avec le rubis 2.3.4. À l'origine, c'était ruby ​​1.9.3. J'ai été capable de réparer la plupart des choses en mettant à jour les gemmes. Cependant, je suis bloqué sur ce problème où, lors de la création de nouveaux objets d'enregistrement actifs, l'heure ne se convertit pas correctement.Mise à niveau de ruby ​​à 2.3.4 avec des rails 3.0.5

Par exemple

Product.new(:bought_on => Date.today) sauverai l'objet avec bought_on à la date, non datetime.

j'ai pu cerner le problème dans le fichier

activerecord-3.0.20/lib/active_record/attribute_methods/time_zone_conversion.rb

Pour une raison quelconque ce ne est pas appeler ces deux fonctions, define_method_attribute et define_method_attribute=.

Des idées?

+0

Avez-vous essayé 'DateTime.now' à la place? 'Date.today' n'aura jamais de temps car il s'agit simplement d'une' date'. De même, avez-vous mis à jour 'ruby' mais avez laissé' rails' à '3.0' (vers 2010)? – engineersmnky

+0

@engineersmnky, merci de répondre. La mise à niveau des rails de '3.0'' '4' serait beaucoup de refactorisation, je suis optimiste que seule la mise à jour de ruby' '2' fonctionnerait. – user3516436

+0

J'ai trouvé le problème, le 'define_method_attribute' sous' time_zone_conversion.rb' est une méthode protégée, et dans ruby ​​2, la fonction 'respond_to' retourne toujours false pour les méthodes protégées. A dû corriger le singe pour enlever l'attribut protégé. – user3516436

Répondre

0

J'ai trouvé le problème, le define_method_attribute sous est une méthode protégée, et dans ruby ​​2, la fonction respond_to retourne toujours false pour les méthodes protégées. A dû corriger le singe pour enlever l'attribut protégé.