Cách sử dụng tiện ích mở rộng cốt lõi Hỗ trợ tích cực


96

Tôi đã cài đặt Active Support 3.0.3 và Rails 3.0.3 với Ruby 1.8.7.

Khi tôi cố gắng sử dụng, 1.week.agotôi nhận được

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

Các phần mở rộng cốt lõi khác dường như hoạt động. Tôi đã thử nó trên máy tính của một người bạn (cùng thông số cài đặt và các phiên bản cũ trên máy tính của anh ấy) với kết quả tương tự.

Đưa cái gì?

Tất cả những điều này đều có trong IRB.


Bạn không nói liệu mã của bạn đang chạy bên trong một ứng dụng Rails, hoặc trong một ứng dụng của Ruby mà bạn muốn sử dụng một số phần mở rộng Rails trong.
Tín Man

Câu trả lời:


136

Vì việc sử dụng Rails sẽ tự động xử lý điều này, tôi sẽ giả sử bạn đang cố thêm Hỗ trợ Hoạt động vào một tập lệnh không phải Rails.

Đọc " Cách tải các tiện ích mở rộng cốt lõi ".

Các phương pháp của Active Support đã được chia thành các nhóm nhỏ hơn trong Rails 3, vì vậy, chúng tôi sẽ không tải nhiều thứ không cần thiết một cách đơn giản require 'activesupport'. Bây giờ chúng ta phải làm những việc như

require 'active_support/core_ext/object/blank'

Nếu bạn không quan tâm đến độ chi tiết, bạn có thể chọn tải các phần lớn hơn. Nếu bạn muốn mọi thứ chỉ trong một lần sử dụng ...

Đối với 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> 

Đối với 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> 

tôi phải yêu cầu rubygems và active_record trước, nhưng DID sửa chữa này hoạt động trong irb sau đó.
bánh mì nướng vào

Tất cả những gì tôi đã làm là những gì trong ví dụ. Tôi sẽ thêm những gì tôi đã làm để chạy nó trong 1.8.7.
the Tin Man

1
nếu bạn luôn cần điều này - giả sử bạn đang chơi với một số mã hoặc thứ gì đó, bạn có thể thêm hoặc sửa đổi tệp .irbrc để yêu cầu tất cả các lib mà bạn sử dụng mọi lúc. Nó sẽ tự động tải chúng khi bắt đầu. IE Tôi luôn sử dụng awesome_print, hirb và một số phương thức tùy chỉnh - vì vậy tôi chỉ cần đặt chúng ở đó và không phải suy nghĩ kỹ cho những thứ như 1.hour.ago hoặc ap {: a => 3,: b => " nick "} để làm việc.
konung

1
Kiểm tra irbtools. Nó bao gồm tất cả các loại chỉnh sửa hay cho IRB. Và, nếu bạn cần tắt chúng tạm thời, hãy gọi irb -fvà nó sẽ không tải chúng.
the Tin Man

Tôi sẽ nói thêm rằng điểm nổi bật mới là Pry cho một phiên tương tác Ruby. Rất ấn tượng.
the Tin Man

28

Bạn có thể thêm các thư viện một cách chi tiết thông qua

require 'active_support/core_ext/some_class/some_file'

Ngoài ra còn có một cấp độ khác mà bạn có thể

require 'active_support/core_ext/some_class'

Tuy nhiên, hiện tại, điều này rất tiếc là không có sẵn cho Time, DateDateTime.

Một khoảng cách này là để require 'active_support/time'mà sẽ cung cấp cho bạn Time, DateDateTimeđó sẽ giải quyết OP được yêu cầu mà không đòi hỏi tất cả mọi thứ.


Bản vá Rails của tôi , đã thêmactive_support/core_ext/datedate_time, đã đưa nó vào Rails v4.0.0 , vì vậy bây giờ bạn có thể yêu cầu các bản vá này riêng lẻ. ĐƯỢC!



-3

Điều này có hoạt động từ bảng điều khiển không? Điều này đang làm việc cho tôi:

$ 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

Bạn có thể:
yêu cầu 'active_support / core_ext'
hoặc:
request 'active_support / all'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.