Cómo utilizar las extensiones principales de Active Support

96

Tengo Active Support 3.0.3 instalado y Rails 3.0.3 con Ruby 1.8.7.

Cuando trato de usar 1.week.ago, obtengo

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

Las otras extensiones principales parecen funcionar. Lo probé en la computadora de un amigo (las mismas especificaciones de instalación y las versiones heredadas están en la suya) con los mismos resultados.

¿Lo que da?

Todo esto está en IRB.

griotspeak
fuente
No dice si su código se está ejecutando dentro de una aplicación Rails o en una aplicación Ruby en la que desea usar algunas extensiones de Rails.
The Tin Man

Respuestas:

136

Dado que el uso de Rails debería manejar esto automáticamente, asumiré que está intentando agregar Active Support a un script que no es de Rails.

Lea " Cómo cargar extensiones de núcleo ".

Los métodos de Active Support se dividieron en grupos más pequeños en Rails 3, por lo que no terminamos cargando muchas cosas innecesarias con un simple require 'activesupport'. Ahora tenemos que hacer cosas como

require 'active_support/core_ext/object/blank'

Si no le importa la granularidad, puede optar por cargar fragmentos más grandes. Si quieres todo de un solo trago úsalo ...

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

Para 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> 
el hombre de hojalata
fuente
Primero tengo que requerir rubygems y active_record, pero esta solución funcionó en irb después de eso.
Griotspeak
Todo lo que hice fue lo que está en el ejemplo. Agregaré lo que hice para ejecutarlo en 1.8.7 también.
The Tin Man
1
si necesita esto todo el tiempo, digamos que está jugando con algún código o algo así, puede agregar o modificar el archivo .irbrc para requerir todas las bibliotecas que usa todo el tiempo. Los cargará automáticamente al inicio. Es decir, uso awesome_print, hirb y algunos métodos personalizados todo el tiempo, así que simplemente los pongo allí y no tengo que pensarlo dos veces para cosas como 1.hour.ago o ap {: a => 3,: b => " nick "} para trabajar.
Konung
1
Echa un vistazo irbtools. Incluye todo tipo de ajustes agradables al IRB. Y, si necesita deshabilitarlos temporalmente, llame irb -fy no los cargará.
The Tin Man,
Agregaré que el nuevo atractivo es Pry para una sesión interactiva de Ruby. Muy impresionante.
el hombre de hojalata
28

Puede agregar bibliotecas de forma granular a través del ya mencionado

require 'active_support/core_ext/some_class/some_file'

También hay otro nivel donde puedes

require 'active_support/core_ext/some_class'

Pero, por el momento, esto no es, por desgracia disponible para Time, Datey DateTime.

Una forma de evitar esto es a require 'active_support/time'cuál le dará Time, Datey DateTimecuál resolvería el OP que estaba pidiendo sin requerir todo.


El parche My Rails , que agregaactive_support/core_ext/dateydate_time, se convirtió en Rails v4.0.0 , por lo que ahora puede solicitarlos individualmente. ¡HURRA!

mraaroncruz
fuente
-3

¿Funciona esto desde la consola? Esto es trabajo para mí:

$ 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
fuente
-4

Puede:
requerir 'active_support / core_ext'
o:
require 'active_support / all'

carril
fuente