Как использовать расширения активной поддержки Active Support?

У меня установлена ​​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.

Ответ 1

Поскольку использование Rails должно обрабатывать это автоматически, я собираюсь предположить, что вы пытаетесь добавить Active Support к не-Rails script.

Прочитайте " Как загрузить основные расширения".

Активные методы поддержки были разбиты на небольшие группы в Rails 3, поэтому мы не загружаем много ненужных вещей простым require 'activesupport'. Теперь мы должны делать что-то вроде require 'active_support/core_ext/object/blank'

Если вы не заботитесь о детализации, вы можете загрузить больше кусков. Если вы хотите, чтобы все в одном большом gulp использовало...

Для 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> 

Ответ 2

Вы можете детально добавлять библиотеки через уже упомянутый

require 'active_support/core_ext/some_class/some_file'

Существует еще один уровень вверх, где вы можете

require 'active_support/core_ext/some_class'

Но на данный момент это, к сожалению, недоступно для Time, Date и DateTime.

Способ вокруг этого - require 'active_support/time', который даст вам Time, Date и DateTime, которые решат OP, запрашивая, не требуя всего.


Патч My Rails, который добавляет active_support/core_ext/date и date_time, превратил его в Rails v4.0.0, поэтому теперь вы можете потребовать их индивидуально. YAY!

Ответ 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

Ответ 5

Вы можете:
require 'active_support/core_ext'
или:
требуется "active_support/all"