Cara menggunakan ekstensi inti Dukungan Aktif

96

Saya telah menginstal Active Support 3.0.3 dan Rails 3.0.3 dengan Ruby 1.8.7.

Ketika saya mencoba menggunakan 1.week.agosaya mendapatkan

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

Ekstensi inti lainnya tampaknya berfungsi. Saya mencobanya di komputer teman (spesifikasi instal dan versi legacy yang sama ada di komputernya) dengan hasil yang sama.

Apa yang memberi?

Semua ini ada di IRB.

griotspeak
sumber
Anda tidak mengatakan apakah kode Anda berjalan di dalam aplikasi Rails, atau dalam aplikasi Ruby yang ingin Anda gunakan beberapa ekstensi Rails.
Tin Man

Jawaban:

137

Karena menggunakan Rails harus menangani ini secara otomatis, saya akan menganggap Anda mencoba menambahkan Dukungan Aktif ke skrip non-Rails.

Baca " Cara Memuat Ekstensi Inti ".

Metode Active Support dipecah menjadi beberapa grup yang lebih kecil di Rails 3, jadi kami tidak akan memuat banyak hal yang tidak dibutuhkan dengan yang sederhana require 'activesupport'. Sekarang kita harus melakukan hal-hal seperti itu

require 'active_support/core_ext/object/blank'

Jika Anda tidak peduli dengan perincian, Anda dapat memilih untuk memuat potongan yang lebih besar. Jika Anda menginginkan semuanya dalam satu tegukan besar ...

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

Untuk 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> 
Manusia Timah
sumber
saya harus membutuhkan rubygems dan active_record terlebih dahulu, tetapi perbaikan ini DID bekerja di irb setelah itu.
griotspeak
Yang saya lakukan adalah apa yang ada di contoh. Saya akan menambahkan apa yang saya lakukan untuk menjalankannya di 1.8.7 juga.
Manusia Timah
1
jika Anda membutuhkan ini sepanjang waktu - katakanlah Anda bermain dengan beberapa kode atau sesuatu, Anda dapat menambah atau memodifikasi file .irbrc untuk meminta semua lib yang Anda gunakan sepanjang waktu. Ini akan memuatnya secara otomatis saat mulai. IE Saya menggunakan awesome_print, hirb dan beberapa metode kustom sepanjang waktu - jadi saya hanya meletakkannya di sana dan tidak perlu berpikir dua kali untuk hal-hal seperti 1.hour.ago atau ap {: a => 3,: b => " nick "} untuk bekerja.
konung
1
Lihat irbtools. Ini mencakup semua jenis penyesuaian yang bagus untuk IRB. Dan, jika Anda perlu menonaktifkannya sementara, panggil irb -fdan itu tidak akan memuatnya.
Manusia Timah
Saya akan menambahkan bahwa hotness baru adalah Pry untuk sesi interaktif Ruby. Sangat mengesankan.
Tin Man
28

Anda dapat menambahkan pustaka secara terperinci melalui yang telah disebutkan

require 'active_support/core_ext/some_class/some_file'

Ada juga level lain di mana Anda bisa

require 'active_support/core_ext/some_class'

Namun, saat ini, sayangnya ini tidak tersedia untuk Time, Datedan DateTime.

Cara untuk mengatasinya adalah require 'active_support/time'yang akan memberi Anda Time, Datedan DateTimeyang akan menyelesaikan OP yang diminta tanpa memerlukan segalanya.


Patch Rails saya , yang menambahkanactive_support/core_ext/datedandate_time, membuatnya menjadi Rails v4.0.0 , jadi sekarang Anda dapat memerlukannya satu per satu. YAY!

mraaroncruz
sumber
-3

Apakah ini berfungsi dari konsol? Ini bekerja untuk saya:

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

Anda dapat:
memerlukan 'active_support / core_ext'
atau:
memerlukan 'active_support / all'

Jalur
sumber