NoMethodError: неопределенный метод getlocal для объекта DateTime - PullRequest
3 голосов
/ 08 ноября 2010

Когда пользователь входит на мой сайт, Devise пытается обновить поле в пользовательской модели current_sign_in_at со временем. Но он выдает эту ошибку:

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

Я нашел пару ресурсов, где люди упоминали эту проблему. Есть проблема на Github без ответа. На этой странице есть решение, которое работает в моей среде разработки, поскольку оно требует редактирования /lib/active_support/time_with_zone.rb, но мне нужно решение, которое также будет работать в моей производственной среде на Heroku. Есть ли способ использовать мою отредактированную версию /lib/active_support/time_with_zone.rb на Heroku? Или есть лучший способ справиться с проблемой?

Вот что я использую:

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

Спасибо за чтение.

Ответы [ 2 ]

2 голосов
/ 12 сентября 2013

Я знаю, что этот вопрос был 2 года назад, но я думаю, что нашел более четкое объяснение того, почему он так себя ведет, найденный по этому вопросу . Просто для тех, кому, возможно, нужны дополнительные объяснения, как я.

2 голосов
/ 08 ноября 2010
 irb> Time.now.getlocal
 => Mon Nov 08 15:04:05 +0200 2010 

но

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

Итак, я полагаю, вам нужно преобразовать ваш объект DateTime в Time

Обновлено

Вы можете использовать технику Ruby mixin, что-то вроде

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!" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...