NoMethodError:DateTime对象的未定义方法`getlocal'

时间:2010-11-08 12:10:37

标签: ruby-on-rails datetime ruby-on-rails-3 heroku

当用户登录我的网站时,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)

感谢阅读。

2 个答案:

答案 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上找到。适合那些可能需要更多像我这样的解释的人。