NoMethodError: Date类没有定义“yesterday”方法

4

我发现 SO 上的每个答案(是的,我查过了)似乎都把 require 'date' 作为解决方案。我也这样做了,但我的代码仍然无法正常工作。

require 'date'

yesterday = RepSched::Helpers.datestring(Date.yesterday)

由于某些原因,Ruby在处理Date.yesterday时出现了问题。

NoMethodError: undefined method `yesterday' for Date:Class

我做错了什么?

编辑

糟糕!现在我的问题比我想象的要严重。既然意识到这个问题,我意识到DateTime的行为也不同了!


4
"yesterday" 是 Rails 新增的一个方法。 - Stefan
1
你确定你正在运行Rails吗? - Dave Newton
哦,辛纳屈。哈哈,糟了! - sent1nel
尝试使用 require 'active_support/core_ext/date/calculations' - Stefan
哈哈,抱歉,这对我来说是一个新项目,我还在学习Rails和Ruby的区别。我正在Rails控制台中进行测试。 - sent1nel
1
@sent1nel 如果你不是在 Rails 下运行,请不要这样做 :) - Dave Newton
2个回答

8

yesterday是Rails / Active Support提供的。您可以在非Rails项目中引用它:

require 'active_support/core_ext/date/calculations'

Date.yesterday
#=> #<Date: 2014-09-02 ((2456903j,0s,0n),+0s,2299161j)>

或者自己计算它:
require 'date'

Date.today - 1
#=> #<Date: 2014-09-02 ((2456903j,0s,0n),+0s,2299161j)>

6
Rails可能会让人感到有些棘手,因为它向Date添加了新的方法,这让许多Ruby的新手感到惊讶。如果不使用Rails,您可以通过以下方式获取yesterday
$ pry
[1] pry(main)> require 'date'
=> false
[2] pry(main)> Date.today
=> #<Date: 2014-09-03 ((2456904j,0s,0n),+0s,2299161j)>
[4] pry(main)> Date.today - 1
=> #<Date: 2014-09-02 ((2456903j,0s,0n),+0s,2299161j)>

我选择了这个答案,因为它更好地描述了我的问题。 - sent1nel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接