2010-11-08 4 views
2

Lorsqu'un utilisateur se connecte à mon site, Devise essaie de mettre à jour le champ dans le modèle utilisateur current_sign_in_at avec l'heure. Mais il produit cette erreur:NoMethodError: méthode non définie `getlocal 'pour l'objet DateTime

NoMethodError: undefined method `getlocal' for Mon, 08 Nov 2010 03:11:01 +0000:DateTime 
[GEM_ROOT]/gems/activesupport-3.0.1/lib/active_support/time_with_zone.rb:75 

J'ai trouvé quelques ressources où les gens ont mentionné ce problème. Il y a un issue on Github sans réponse. This page a une solution qui fonctionne dans mon environnement de développement, car elle implique l'édition /lib/active_support/time_with_zone.rb, mais j'ai besoin d'une solution qui fonctionnera également dans mon environnement de production sur Heroku. Y at-il un moyen que je peux utiliser ma version éditée de /lib/active_support/time_with_zone.rb sur Heroku? Ou y a-t-il une meilleure façon de traiter le problème?

Voici ce que j'utilise:

Rails 3.0.1 
ruby 1.9.2p0 (2010-08-18 revision 29036) 

Merci pour la lecture.

Répondre

2
irb> Time.now.getlocal 
=> Mon Nov 08 15:04:05 +0200 2010 

mais

irb>DateTime.now.getlocal 
NoMethodError: undefined method `getlocal' for Mon, 08 Nov 2010 15:05:16 +0200:DateTime 
from (irb):17 

Alors, je suppose, vous devez convertir votre objet DateTime Time

Mise à jour

Vous pouvez utiliser la technique Ruby mixin, quelque chose comme

irb > module DateTimePatch 
irb ?> def get_local 
irb ?> "works!" 
irb ?> end 
irb ?> end 
=> nil 
irb > DateTime.send(:include, DateTimePatch) 
=> DateTime 
irb2 > DateTime.now.get_local 
=> "works!" 
+0

Merci pour votre réponse. C'est essentiellement ce que j'ai fait dans mon environnement de développement, en changeant la méthode appropriée dans /lib/active_support/time_with_zone.rb pour utiliser un objet Time. Mais le problème est que je ne sais pas comment utiliser ce correctif dans mon environnement de production, car je ne sais pas comment modifier la bibliothèque Ruby utilisée dans Heroku. – ben

+1

@ben vous pouvez utiliser la technique Ruby Mixin, comme j'ai édité ma réponse ci-dessus – Sergey

+0

Je l'ai fait fonctionner, merci pour votre aide! – ben

2

Je sais que cette question était il ya 2 ans, mais je pense que j'ai trouvé l'explication plus claire sur la façon dont il se comporte de cette façon, trouvé sur ce question. Juste pour quelqu'un qui a probablement besoin de plus d'explications comme moi.

Questions connexes