如何使用Active Support核心扩展


96

我已经安装了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应用程序中运行,或者在要使用一些Rails的扩展的Ruby应用程序。
铁皮人

Answers:


136

因为使用Rails应该可以自动处理此问题,所以我假设您正在尝试将Active Support添加到非Rails脚本中。

阅读“ 如何加载核心扩展 ”。

Active Support的方法在Rails 3中分成了较小的组,因此,我们最终不会通过简单的加载很多不需要的东西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中解决此DID问题。
griotspeak

我所做的就是示例中的内容。我还将添加在1.8.7中运行它的操作。
Tin Man

1
如果您一直都需要这样做-假设您正在使用某些代码或某些东西,则可以添加或修改.irbrc文件以要求您一直使用所有库。它将在启动时自动加载。IE浏览器我一直都在使用awesome_print,hirb和一些自定义方法-因此,我将它们放在那儿,不必为1.hour.ago或ap {:a => 3,:b =>“ nick“}上班。
konung

1
签出irbtools。它包括对IRB的各种不错的调整。并且,如果您需要临时禁用它们,请致电irb -f,它将不会加载它们。
Tin Man 2010年

我将添加一个新的热点,那就是针对Ruby交互式会话的Pry。非常令人印象深刻。
Tin Man

28

您可以通过已经提到的详细添加库

require 'active_support/core_ext/some_class/some_file'

还有一个更高的级别可以

require 'active_support/core_ext/some_class'

但是,在目前,这是不幸的是没有可用的TimeDateDateTime

解决这个问题的一种方法是为require 'active_support/time'您提供TimeDate并且DateTime可以解决OP所要求的而又不需要一切。


我的Rails补丁(添加了active_support/core_ext/datedate_time)将其添加到 Rails v4.0.0中,因此现在您可以单独要求这些了。好极了!



-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

-4

您可以:
要求'active_support / core_ext'
或:
要求'active_support / all'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.