Jak korzystać z podstawowych rozszerzeń Active Support

96

Mam zainstalowany Active Support 3.0.3 i Rails 3.0.3 z Ruby 1.8.7.

Kiedy próbuję użyć 1.week.ago, otrzymuję

NoMethodError: undefined method 'week' for 1:Fixnum
from (irb):2

Wydaje się, że inne podstawowe rozszerzenia działają. Wypróbowałem to na komputerze znajomego (te same specyfikacje instalacji i starsze wersje są na jego) z tymi samymi wynikami.

Co daje?

Wszystko to jest w IRB.

griotspeak
źródło
Nie mówisz, czy twój kod jest uruchomiony w aplikacji Railsowej, czy też w aplikacji Ruby, w której chcesz użyć niektórych rozszerzeń Rails.
Tin Man

Odpowiedzi:

137

Ponieważ używanie Railsów powinno obsługiwać to automatycznie, zakładam, że próbujesz dodać Active Support do skryptu innego niż Rails.

Przeczytaj „ Jak wczytać rozszerzenia podstawowe ”.

Metody Active Support zostały podzielone na mniejsze grupy w Railsach 3, więc nie kończymy na ładowaniu wielu niepotrzebnych rzeczy za pomocą prostego require 'activesupport'. Teraz musimy zrobić takie rzeczy

require 'active_support/core_ext/object/blank'

Jeśli nie zależy Ci na szczegółowości, możesz załadować większe fragmenty. Jeśli chcesz wszystko jednym dużym haustem, użyj ...

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

Dla 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> 
Blaszany Człowiek
źródło
Muszę najpierw wymagać rubygems i active_record, ale ta poprawka DID działa w irb po tym.
griotspeak
Wszystko, co zrobiłem, to to, co jest w przykładzie. Dodam też, co zrobiłem, żeby uruchomić go w 1.8.7.
Tin Man
1
jeśli potrzebujesz tego przez cały czas - powiedzmy, że bawisz się jakimś kodem lub czymś, możesz dodać lub zmodyfikować plik .irbrc, aby wymagał wszystkich bibliotek, których używasz przez cały czas. Załaduje je automatycznie przy starcie. IE Cały czas używam awesome_print, hirb i niektórych niestandardowych metod - więc po prostu je tam umieszczam i nie muszę się zastanawiać nad takimi rzeczami jak 1.hour.ago czy ap {: a => 3,: b => " nick "} do pracy.
konung
1
Sprawdź irbtools. Zawiera różnego rodzaju fajne poprawki do IRB. A jeśli chcesz je tymczasowo wyłączyć, zadzwoń irb -fi nie załaduje ich.
Tin Man
Dodam, że nowy hotness to Pry for a Ruby Interactive session. Bardzo imponujące.
Tin Man
28

Możesz szczegółowo dodawać biblioteki za pośrednictwem wspomnianego już

require 'active_support/core_ext/some_class/some_file'

Jest też inny poziom, na którym możesz

require 'active_support/core_ext/some_class'

Ale w tej chwili, to nie jest niestety dostępna Time, Datei DateTime.

Sposobem na to jest require 'active_support/time'co da wam Time, Datei DateTimektóry rozwiązałby OP prosi o nie wymagając wszystko.


My Rails patch , który dodajeactive_support/core_ext/dateidate_time, wprowadził go do Rails v4.0.0 , więc teraz możesz wymagać ich osobno. YAY!

mraaroncruz
źródło
-3

Czy to działa z konsoli? To działa dla mnie:

$ 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
Paul Schreiber
źródło
-4

Możesz:
wymagać „active_support / core_ext”
lub:
wymagać „active_support / all”

Pas ruchu
źródło