2010-11-21 6 views
81

Ich habe Active Support 3.0.3 installiert und Rails 3.0.3 mit Ruby 1.8.7.Wie verwende ich aktive Support-Kernerweiterungen?

Wenn ich versuche, 1.week.ago zu verwenden ich

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

Die anderen Kern Erweiterungen zu funktionieren scheint. Ich habe es auf dem Computer eines Freundes (gleiche Installationsspezifikationen und ältere Versionen sind auf seinem) mit den gleichen Ergebnissen versucht.

Was gibt?

All dies ist in IRB.

+0

Sie sagen nicht, ob Ihr Code in einer Rails-Anwendung oder in einer Ruby-Anwendung ausgeführt wird, in der Sie einige Rails-Erweiterungen verwenden möchten. –

+0

Duplikat von [Verwenden Sie die ActiveSupport-Kernerweiterungen von Rails 3 außerhalb von Schienen] (http://stackoverflow.com/questions/3053119/use-rails-3s-activesupport-core-extensions-outside-rails). –

Antwort

119

Da mit Rails damit umgehen sollten automatisch davon ausgehen, ich werde Sie versuchen, aktive Unterstützung eines nicht-Rails-Skript hinzuzufügen.

Read "How to Load Core Extensions".

Die Methoden von Active Support wurden in Rails 3 in kleinere Gruppen aufgeteilt, so dass wir nicht viel unnötiges Zeug mit einem einfachen require 'activesupport' laden. Jetzt müssen wir Dinge tun, wie require 'active_support/core_ext/object/blank'

Wenn Sie sich nicht für Granularität interessieren, können Sie wählen, größere Stücke zu laden. Wenn Sie wollen, dass alles in einem großen Schluck Einsatz ...

Für 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> 

Für 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> 
+0

Ich muss zuerst rubygems und active_record anfordern, aber diese fix DID funktioniert danach in irb. – griotspeak

+0

Alles, was ich tat, war, was in dem Beispiel ist. Ich werde hinzufügen, was ich getan habe, um es in 1.8.7 auch auszuführen. –

+1

Wenn Sie dies ständig benötigen - sagen wir, Sie spielen mit etwas Code oder etwas, können Sie .irbrc Datei hinzufügen oder ändern, um alle Bibliotheken zu benötigen, die Sie die ganze Zeit verwenden. Es lädt sie automatisch beim Start. I.E. Ich benutze allzeit awesome_print, hirb und einige eigene Methoden - also lege ich sie einfach dort hin und muss nicht zweimal nachdenken für Dinge wie 1.hour.ago oder ap {: a => 3,: b => "nick "} arbeiten. – konung

-2

Funktioniert das von der Konsole? Dies funktioniert für mich:

$ 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

Sie können:
require ‚active_support/core_ext '
oder:
require 'active_support/all'

+3

hat der Tin Man bereits letztes Jahr erwähnt. –

22

Sie können granular Bibliotheken über die bereits

require 'active_support/core_ext/some_class/some_file' 

erwähnt hinzufügen Es gibt auch eine andere Ebene, wo Sie können

require 'active_support/core_ext/some_class' 

Aber im Moment, dies leider nicht für Time, Date verfügbar ist und DateTime .

Ein Weg, um dies zu require 'active_support/time' die Sie Time, Date und DateTime geben, die das OP für bat, ohne dass alles lösen würde.


My Rails patch, die active_support/core_ext/date und date_time fügt hinzu, machte es in Rails v4.0.0, so dass Sie nun diese einzeln erfordern können. YAY!