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.