关于ruby on rails:如何使用Active Support核心扩展?

How do I use Active Support core extensions?

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

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

1
2
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'这样的事情

如果您不关心粒度,可以选择加载更大的块。如果你想要一口气喝一口......

对于1.9.2:

1
2
3
4
5
6
7
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:

1
2
3
4
5
6
7
8
9
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>


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

1
require 'active_support/core_ext/some_class/some_file'

还有另一个级别,你可以

1
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,所以现在你可以单独使用它们了。好极了!


在我的情况下,以下链接工作:

https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

1
2
3
4
5
$ cat Gemfile.lock | grep -A 1"BUNDLED WITH"
BUNDLED WITH
   1.17.3

$ gem install bundler -v '1.17.3'


这是否可以在控制台上运行?这对我有用:

1
2
3
4
5
6
7
8
9
$ 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

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