2010-11-21 21 views
81

J'ai Active Support 3.0.3 installé et Rails 3.0.3 avec Ruby 1.8.7.Comment utiliser les extensions de base Active Support?

Lorsque je tente d'utiliser 1.week.ago je 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 versions héritées sont sur le sien) avec les mêmes résultats.

Ce qui donne?

Tout ceci est en IRB.

+0

Vous ne dites pas si votre code s'exécute dans une application Rails ou dans une application Ruby dans laquelle vous souhaitez utiliser certaines extensions Rails. –

+0

Dupliquer de [Utiliser les extensions de base ActiveSupport de Rails 3 à l'extérieur des rails] (http://stackoverflow.com/questions/3053119/use-rails-3s-activesupport-core-extensions-outside-rails). –

Répondre

119

Depuis l'aide de rails doivent gérer ce que je suis automatiquement vais supposer que vous essayez d'ajouter un soutien actif à un script non-Rails.

Lecture "How to Load Core Extensions".

Les méthodes de Active Support ont été divisées en groupes plus petits dans Rails 3, donc nous ne finissons pas de 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 morceaux. Si vous voulez tout dans une grande utilisation engouffreur ...

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> 
+0

Je dois d'abord requérir rubygems et active_record, mais ce correctif DID fonctionne dans irb après cela. – griotspeak

+0

Tout ce que j'ai fait était ce qui est dans l'exemple. Je vais ajouter ce que j'ai fait pour l'exécuter en 1.8.7 aussi. –

+1

si vous en avez toujours besoin - disons que vous jouez avec du code ou quelque chose, vous pouvez ajouter ou modifier le fichier .irbrc pour exiger toutes les libs que vous utilisez tout le temps. Il les chargera automatiquement au démarrage. C'EST À DIRE. J'utilise awesome_print, hirb et quelques méthodes personnalisées tout le temps - donc je les mets juste là et je n'ai pas à réfléchir deux fois pour des choses comme 1.hour.ago ou ap {: a => 3,: b => "pseudo "} travailler. – konung

-2

Est-ce que cela fonctionne à partir de 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 
-4

Vous pouvez:
require « active_support/core_ext '
ou:
require 'active_support/all'

+3

le Tin Man en a déjà parlé, l'année dernière. –

22

Vous pouvez granulairement ajouter des bibliothèques via le déjà mentionné

require 'active_support/core_ext/some_class/some_file' 

Il y a aussi un autre niveau dans lequel vous pouvez

require 'active_support/core_ext/some_class' 

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

Une façon de contourner cela est de require 'active_support/time' qui vous donnera Time, Date et DateTime qui résoudrait le OP demandait sans exiger tout.


My Rails patch, qui ajoute active_support/core_ext/date et date_time, fait dans Rails v4.0.0, maintenant vous pouvez exiger que ceux-ci individuellement. YAY!