我已经安装了Active Support 3.0.3和Rails 3.0.3以及Ruby 1.8.7。
当我尝试使用1.week.ago
时,我得到了
NoMethodError: undefined method 'week' for 1:Fixnum
from (irb):2
其他核心扩展似乎都可以正常工作。我在朋友的电脑上尝试了一下(他的安装规格和旧版本与我的相同),结果也是一样的。
这是怎么回事呢?
这一切都发生在 IRB 中。我已经安装了Active Support 3.0.3和Rails 3.0.3以及Ruby 1.8.7。
当我尝试使用1.week.ago
时,我得到了
NoMethodError: undefined method 'week' for 1:Fixnum
from (irb):2
其他核心扩展似乎都可以正常工作。我在朋友的电脑上尝试了一下(他的安装规格和旧版本与我的相同),结果也是一样的。
这是怎么回事呢?
这一切都发生在 IRB 中。由于使用Rails应该自动处理,我将假定你正在尝试将Active Support添加到非Rails脚本中。
阅读 "如何加载核心扩展"。
在Rails 3中,Active Support的方法被分成了较小的组,因此我们不会通过简单的require 'activesupport'
来加载大量不必要的内容。现在我们需要像这样做:
require 'active_support/core_ext/object/blank'
如果你不关心细节,可以选择加载更大的块。如果你想要一次性获取所有内容,请使用...。rvm 1.9.2
irb -f
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> 1.week.ago
=> 2010-11-14 17:56:16 -0700
irb(main):003:0>
对于1.8.7版本:
rvm 1.8.7
irb -f
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'active_support/all'
=> true
irb(main):003:0> 1.week.ago
=> Sun Nov 14 17:54:19 -0700 2010
irb(main):004:0>
您可以通过前面提到的方法精细地添加库
require 'active_support/core_ext/some_class/some_file'
还有一个更高层次的地方,你可以
require 'active_support/core_ext/some_class'
但是,目前很遗憾,Time
、Date
和 DateTime
还不支持此功能。
解决方法是使用 require 'active_support/time'
,这将为您提供 Time
、Date
和 DateTime
,可以解决 OP 所问的问题,而无需引入所有内容。
我的 Rails 补丁 添加了 active_support/core_ext/date
和 date_time
,已经被合并到 Rails v4.0.0 中,所以现在您可以单独引入它们了,太棒了!
https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html
$ cat Gemfile.lock | grep -A 1 "BUNDLED WITH"
BUNDLED WITH
1.17.3
$ gem install bundler -v '1.17.3'
这个能在控制台上运行吗?对我来说它是有效的:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.6.5
BuildVersion: 10H574
$ rails c
Loading development environment (Rails 3.0.3)
>> 1.week.ago
=> Sun, 14 Nov 2010 16:57:18 UTC +00:00