Comment utiliser les extensions principales d'Active Support

96

J'ai installé Active Support 3.0.3 et Rails 3.0.3 avec Ruby 1.8.7.

Quand j'essaye d'utiliser, 1.week.agoje reçois

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

Les autres extensions de base semblent fonctionner. Je l'ai essayé sur l'ordinateur d'un ami (les mêmes spécifications d'installation et les versions héritées sont sur le sien) avec les mêmes résultats.

Ce qui donne?

Tout cela est dans IRB.

griotspeak
la source
Vous ne dites pas si votre code s'exécute dans une application Rails ou dans une application Ruby dans laquelle vous souhaitez utiliser des extensions Rails.
The Tin Man

Réponses:

136

Étant donné que l'utilisation de Rails devrait gérer cela automatiquement, je vais supposer que vous essayez d'ajouter Active Support à un script non-Rails.

Lisez « Comment charger les extensions principales ».

Les méthodes d'Active Support ont été divisées en petits groupes dans Rails 3, nous ne finissons donc pas par charger beaucoup de choses inutiles avec un simple require 'activesupport'. Maintenant, nous devons faire des choses comme

require 'active_support/core_ext/object/blank'

Si vous ne vous souciez pas de la granularité, vous pouvez choisir de charger de plus gros blocs. Si vous voulez tout en une seule grande gorgée, utilisez ...

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

Pour 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> 
l'homme d'étain
la source
Je dois d'abord exiger rubygems et active_record, mais ce correctif a fonctionné dans irb après cela.
griotspeak
Tout ce que j'ai fait, c'est ce qui est dans l'exemple. J'ajouterai ce que j'ai fait pour l'exécuter en 1.8.7 également.
the Tin Man
1
si vous en avez besoin tout le temps - disons que vous jouez avec du code ou quelque chose, vous pouvez ajouter ou modifier le fichier .irbrc pour exiger toutes les bibliothèques que vous utilisez tout le temps. Il les chargera automatiquement au démarrage. IE J'utilise tout le temps awesome_print, hirb et certaines méthodes personnalisées - donc je les mets simplement là et je n'ai pas à réfléchir à deux fois pour des choses comme 1.hour.ago ou ap {: a => 3,: b => " nick "} pour travailler.
konung
1
Vérifiez irbtools. Il inclut toutes sortes de jolis ajustements à l'IRB. Et, si vous avez besoin de les désactiver temporairement, appelez irb -fet il ne les chargera pas.
the Tin Man
J'ajouterai que le nouveau hotness est Pry pour une session interactive Ruby. Très impressionnant.
the Tin Man
28

Vous pouvez ajouter de manière granulaire des bibliothèques via le déjà mentionné

require 'active_support/core_ext/some_class/some_file'

Il y a aussi un autre niveau où vous pouvez

require 'active_support/core_ext/some_class'

Mais, pour le moment, ce n'est malheureusement pas disponible pour Time, Dateet DateTime.

Un moyen de contourner ce problème est celui require 'active_support/time'qui vous donnera Time, Dateet DateTimequi résoudrait le PO demandé sans avoir besoin de tout.


Le patch My Rails , qui ajouteactive_support/core_ext/dateetdate_time, en fait Rails v4.0.0 , vous pouvez donc maintenant en avoir besoin individuellement. YAY!

mraaroncruz
la source
-3

Cela fonctionne-t-il depuis la console? Cela fonctionne pour moi:

$ 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
la source
-4

Vous pouvez:
exiger 'active_support / core_ext'
ou:
exiger 'active_support / all'

voie
la source