Come utilizzare le estensioni principali di Active Support


96

Ho installato Active Support 3.0.3 e Rails 3.0.3 con Ruby 1.8.7.

Quando provo a usare 1.week.agoottengo

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

Le altre estensioni principali sembrano funzionare. L'ho provato sul computer di un amico (le stesse specifiche di installazione e le versioni precedenti sono sul suo) con gli stessi risultati.

Cosa succede?

Tutto questo è in IRB.


Non dici se il tuo codice è in esecuzione all'interno di un'applicazione Rails o in un'applicazione Ruby in cui desideri utilizzare alcune estensioni Rails.
Tin Man

Risposte:


137

Dato che l'uso di Rails dovrebbe gestirlo automaticamente, presumo che tu stia cercando di aggiungere Active Support a uno script non Rails.

Leggi " Come caricare le estensioni principali ".

I metodi di Active Support sono stati suddivisi in gruppi più piccoli in Rails 3, quindi non finiamo per caricare molte cose non necessarie con un semplice file require 'activesupport'. Ora dobbiamo fare cose come

require 'active_support/core_ext/object/blank'

Se non ti interessa la granularità, puoi scegliere di caricare blocchi più grandi. Se vuoi tutto in un solo grande sorso usa ...

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

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

Devo prima richiedere rubygems e active_record, ma questa correzione ha funzionato in irb dopo.
griotspeak

Tutto quello che ho fatto è stato quello che è nell'esempio. Aggiungerò anche quello che ho fatto per eseguirlo nella 1.8.7.
Tin Man

1
se ne hai sempre bisogno, diciamo che stai giocando con del codice o qualcosa del genere, puoi aggiungere o modificare il file .irbrc per richiedere tutte le librerie che usi sempre. Li caricherà automaticamente all'avvio. IE Io uso sempre awesome_print, hirb e alcuni metodi personalizzati, quindi li metto lì e non devo pensarci due volte per cose come 1.hour.ago o ap {: a => 3,: b => " nick "} per lavorare.
konung

1
Controlla irbtools. Include tutti i tipi di belle modifiche a IRB. E, se è necessario disabilitarli temporaneamente, chiamarli irb -fe non li caricherà.
Tin Man

Aggiungerò che la nuova piccantezza è Pry per una sessione interattiva di Ruby. Molto impressionante.
Tin Man

28

Puoi aggiungere in modo granulare le librerie tramite il già citato

require 'active_support/core_ext/some_class/some_file'

C'è anche un altro livello in cui puoi

require 'active_support/core_ext/some_class'

Ma, al momento, questo purtroppo non è disponibile per Time, Datee DateTime.

Un modo per aggirare questo è quello require 'active_support/time'che vi darà Time, Datee DateTimeche avrebbe risolto il PO chiedeva senza richiedere tutto.


La mia patch Rails , che aggiungeactive_support/core_ext/dateedate_time, è entrata in Rails v4.0.0 , quindi ora puoi richiederli individualmente. SÌÌ!



-3

Funziona dalla console? Questo funziona per me:

$ 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

Puoi:
require 'active_support / core_ext'
oppure:
require 'active_support / all'

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.