Как использовать расширения ядра 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 или в приложении Ruby, в котором вы хотите использовать некоторые расширения Rails.
Tin Man

Ответы:

137

Поскольку использование 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> 

Для 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.
griotspeak
Все, что я сделал, это то, что показано в примере. Я также добавлю то, что сделал, чтобы запустить его в 1.8.7.
The Tin Man
1
если вам это нужно постоянно - скажем, вы играете с каким-то кодом или чем-то еще, вы можете добавить или изменить файл .irbrc, чтобы требовать все библиотеки, которые вы используете все время. Он загрузит их автоматически при запуске. IE я все время использую awesome_print, hirb и некоторые специальные методы - поэтому я просто помещаю их туда, и мне не нужно дважды думать о таких вещах, как 1.hour.ago или ap {: a => 3,: b => " ник "} на работу.
konung
1
Проверить irbtools. Он включает в себя всевозможные приятные настройки IRB. И, если вам нужно временно отключить их, позвоните, irb -fи он их не загрузит.
Tin Man
Я добавлю , что новый жаркость является монтировкой для интерактивной сессии Ruby. Очень впечатляюще.
Железный Человек
28

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

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 , так что теперь вы можете требовать их индивидуально. УРА!

Mraaroncruz
источник
-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

полоса дороги
источник