如何使用Active Support核心扩展?

gri*_*eak 94 ruby time extension-methods ruby-on-rails activesupport

我安装了Active Support 3.0.3,使用Ruby 1.8.7安装了Rails 3.0.3.

当我尝试使用时,1.week.ago我得到了

NoMethodError: undefined method 'week' for 1:Fixnum
from (irb):2
Run Code Online (Sandbox Code Playgroud)

其他核心扩展似乎有效.我在一个朋友的计算机上尝试过(同样的安装规范和旧版本),结果相同.

是什么赋予了?

所有这些都在IRB中.

the*_*Man 136

由于使用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> 
Run Code Online (Sandbox Code Playgroud)

对于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> 
Run Code Online (Sandbox Code Playgroud)


mra*_*ruz 27

您可以通过已经提到的粒度添加库

require 'active_support/core_ext/some_class/some_file'
Run Code Online (Sandbox Code Playgroud)

还有另一个级别,你可以

require 'active_support/core_ext/some_class'
Run Code Online (Sandbox Code Playgroud)

但是,在目前,这是不幸的是没有可用的Time,DateDateTime.

解决的办法是require 'active_support/time',这将给你Time,Date并且DateTime这将解决OP被要求,而不需要的一切.


我的Rails补丁,它添加active_support/core_ext/datedate_time使其成为 Rails v4.0.0,所以现在你可以单独要求它们.好极了!