这是一个经过考虑的想法。按照我的步骤:
没有上帝,在控制台上:
> d=Date.parse("2010-02-01")
=> Mon, 01 Feb 2010
> d+1.day
=> Tue, 02 Feb 2010
完美。
然后,我转到我的Gemfile并添加
gem 'god'
并运行
bundle install
之后,再次在控制台上:
> d=Date.parse("2010-02-01")
=> Mon, 01 Feb 2010
> d+1.day
=> Sun, 23 Aug 2246
你知道会发生什么吗?
答案 0 :(得分:2)
奇怪,这是在控制台中发生的。我可以在其他场景中理解它,其中1.day被用作一个地方的输入并被提取用于其他地方,因为1.day是Fixnum 86400,其中包含一些特殊的元数据(#steps
)进入它。
Date
会将+ 1
视为“添加一天”。 Rails添加了一些行为,以便它理解1.day
事物(86400“秒”,但step
为[1, :days]
)实际上是+ 1
而不是+ 86400
}。这就是你失败的原因:
ruby-1.9.2-p290 :171 > d = Date.parse("2010-02-01")
=> #<Date: 2010-02-01 (4910457/2,0,2299161)>
ruby-1.9.2-p290 :172 > d + 86400
=> #<Date: 2246-08-23 (5083257/2,0,2299161)>
ruby-1.9.2-p290 :173 >
因此,值1.day
被解释为Fixnum,而不是具有ActiveSupport::Duration
的Fixnum。
irb(main):001:0> Date.parse("2010-02-01") + 1.day.to_i
=> Sun, 23 Aug 2246
因此,如果您在未立即使用的上下文中使用此1.day
值,请不要......使用Fixnum 1;)
答案 1 :(得分:1)
答案 2 :(得分:0)
根据GitHub open issue,我尝试了这个解决方案:
的Gemfile
gem 'god', :require => false
而不是:
gem 'god'
一切似乎再次起作用:
1.9.3p0 :001 > d = Date.parse('2012-04-16')
=> Mon, 16 Apr 2012
1.9.3p0 :002 > d + 1.day
=> Tue, 17 Apr 2012