如何使用Active Support核心扩展

107

我已经安装了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应用程序内运行,还是在Ruby应用程序中想要使用一些Rails扩展。 - the Tin Man
5个回答

152

由于使用Rails应该自动处理,我将假定你正在尝试将Active Support添加到非Rails脚本中。

阅读 "如何加载核心扩展"。

在Rails 3中,Active Support的方法被分成了较小的组,因此我们不会通过简单的require 'activesupport'来加载大量不必要的内容。现在我们需要像这样做:

require 'active_support/core_ext/object/blank'
如果你不关心细节,可以选择加载更大的块。如果你想要一次性获取所有内容,请使用...。
对于1.9.2:
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> 

我必须先要求 rubygems 和 active_record,但在那之后这个修复确实在 irb 中起作用了。 - griotspeak
我所做的就是按照示例进行操作。我还会添加在1.8.7中运行它所做的内容。 - the Tin Man
1
如果你需要经常使用某些代码或其他东西,你可以添加或修改.irbrc文件来要求所有你经常使用的库。这样它们就会在启动时自动加载。例如,我经常使用awesome_print、hirb和一些自定义方法,所以我只需将它们放在那里,不必再考虑1.hour.ago或ap {:a => 3, :b => "nick"}之类的事情是否能正常工作。 - konung
1
请查看irbtools。它包含了各种对IRB的美好调整。如果您需要暂时禁用它们,请调用irb -f,它将不会加载它们。 - the Tin Man
我想补充一下,Ruby交互式会话的新热门工具是Pry,非常令人印象深刻。 - the Tin Man

30

您可以通过前面提到的方法精细地添加库

require 'active_support/core_ext/some_class/some_file'

还有一个更高层次的地方,你可以

require 'active_support/core_ext/some_class'

但是,目前很遗憾,TimeDateDateTime 还不支持此功能。

解决方法是使用 require 'active_support/time',这将为您提供 TimeDateDateTime,可以解决 OP 所问的问题,而无需引入所有内容。


我的 Rails 补丁 添加了 active_support/core_ext/datedate_time,已经被合并到 Rails v4.0.0 中,所以现在您可以单独引入它们了,太棒了!


-1

-3
你可以:
require 'active_support/core_ext'
或者:
require 'active_support/all'

-4

这个能在控制台上运行吗?对我来说它是有效的:

$ 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

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