当用户登录我的网站时,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
我找到了一些人们提到这个问题的资源。有issue on Github没有答案。 This page有一个在我的开发环境中有效的解决方案,因为它涉及编辑/lib/active_support/time_with_zone.rb
,但我需要一个也可以在Heroku的生产环境中使用的解决方案。有没有办法在Heroku上使用我编辑的/lib/active_support/time_with_zone.rb
版本?或者有更好的方法来解决这个问题吗?
以下是我正在使用的内容:
Rails 3.0.1
ruby 1.9.2p0 (2010-08-18 revision 29036)
感谢阅读。
答案 0 :(得分:2)
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!"
答案 1 :(得分:2)
我知道这个问题是在2年前,但我认为我找到了更清楚的解释,为什么它的行为方式,在question上找到。适合那些可能需要更多像我这样的解释的人。