Verwendung von Active Support-Kernerweiterungen


96

Ich habe Active Support 3.0.3 und Rails 3.0.3 mit Ruby 1.8.7 installiert.

Wenn ich versuche zu benutzen, 1.week.agobekomme ich

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

Die anderen Kernerweiterungen scheinen zu funktionieren. Ich habe es auf dem Computer eines Freundes versucht (dieselben Installationsspezifikationen und Legacy-Versionen sind auf seinem Computer), mit denselben Ergebnissen.

Was gibt?

All dies ist in IRB.


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.
Tin Man

Antworten:


136

Da die Verwendung von Rails dies automatisch erledigen sollte, gehe ich davon aus, dass Sie versuchen, einem Nicht-Rails-Skript Active Support hinzuzufügen.

Lesen Sie " Laden von Core Extensions ".

Die Methoden von Active Support wurden in Rails 3 in kleinere Gruppen aufgeteilt, sodass wir nicht viele nicht benötigte Dinge mit einem einfachen laden müssen require 'activesupport'. 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 größere Blöcke laden. Wenn Sie alles in einem großen Zug wollen, verwenden Sie ...

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> 

Ich muss zuerst Rubygems und active_record benötigen, aber dieses Update hat danach in irb funktioniert.
Griotspeak

Ich habe nur das getan, was im Beispiel steht. Ich werde hinzufügen, was ich getan habe, um es auch in 1.8.7 auszuführen.
der Blechmann

1
Wenn Sie dies ständig benötigen - sagen wir, Sie spielen mit Code oder etwas anderem -, können Sie eine .irbrc-Datei hinzufügen oder ändern, um alle Bibliotheken zu benötigen, die Sie ständig verwenden. Sie werden beim Start automatisch geladen. IE Ich benutze die ganze Zeit awesome_print, hirb und einige benutzerdefinierte Methoden - also platziere ich sie einfach dort und muss nicht zweimal überlegen für Dinge wie 1.hour.ago oder ap {: a => 3 ,: b => " nick "} zur Arbeit.
Konung

1
Auschecken irbtools. Es enthält alle möglichen netten Verbesserungen an IRB. Wenn Sie sie vorübergehend deaktivieren müssen, rufen Sie an irb -fund sie werden nicht geladen.
der Blechmann

Ich werde hinzufügen, dass die neue Schärfe ist Pry für eine interaktive Ruby-Sitzung ist. Sehr beeindruckend.
der Blechmann

28

Sie können Bibliotheken über die bereits erwähnten granular hinzufügen

require 'active_support/core_ext/some_class/some_file'

Es gibt auch eine andere Ebene, wo Sie können

require 'active_support/core_ext/some_class'

Aber im Moment ist dies leider nicht verfügbar für Time, DateundDateTime .

Ein Weg , um dies zu , require 'active_support/time'die Sie Time, Dateund DateTimeder die OP bittet um alles , ohne lösen würde.


Mein Rails-Patch , der hinzufügtactive_support/core_ext/date hinzugefügt und date_timein Rails v4.0.0 aufgenommen wurde , sodass Sie diese jetzt einzeln anfordern können. YAY!



-3

Funktioniert das von der Konsole aus? Das funktioniert bei mir:

$ 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:
'active_support / core_ext' benötigen
oder:
'active_support / all' benötigen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.