如何使用 ActiveSupport 核心扩展

我已经安装了 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 中。

54751 次浏览

Does this work from the console? This is working for me:

$ 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

Since using Rails should handle this automatically I'm going to assume you're trying to add Active Support to a non-Rails script.

Read "How to Load Core Extensions".

Active Support's methods got broken into smaller groups in Rails 3, so we don't end up loading a lot of unneeded stuff with a simple require 'activesupport'. Now we have to do things like

require 'active_support/core_ext/object/blank'

If you don't care about granularity, you can choose to load bigger chunks. If you want everything in one big gulp use...

For 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>

For 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>

You can :
require 'active_support/core_ext'
or :
require 'active_support/all'

You can granularly add libraries via the already mentioned

require 'active_support/core_ext/some_class/some_file'

There is also another level up where you can

require 'active_support/core_ext/some_class'

But, at the moment, this is unfortunately not available for Time, Date and DateTime.

A way around this is to require 'active_support/time' which will give you Time, Date and DateTime which would solve the OP was asking for without requiring everything.


My Rails patch, which adds active_support/core_ext/date and date_time, made it into Rails v4.0.0, so now you can require these individually. YAY!

In my case the following link worked:

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'