2009-03-24 22 views

Trả lời

37

Một cách để thực hiện việc này là tạo tệp tại lib/rails_extensions.rb. Sau đó, thêm phần mở rộng của bạn như vậy:

class Array 
    def bring_me_food 
    # ... 
    end 

    def make_tea 
    # ... 
    end 
end 

class Hash 
    def rub_my_shoulders 
    # ... 
    end 
end 

Sau đó, trong config/environment.rb, thêm này:

require 'rails_extensions' 

Mileage của bạn với các đối tượng đơn vị trực thuộc có thể thay đổi.

+1

Đó là những gì tôi đang tìm kiếm, cảm ơn. Tuy nhiên, tôi thấy rằng điều này chỉ hoạt động khi tôi đặt dòng yêu cầu ở dưới cùng của config/environment.rb – inglesp

+2

Bạn may mắn khi có được Hash và Array trong môi trường của bạn. –

0

Chỉ cần đặt nó vào một tệp mới, ví dụ: array_extended.rb

class Array 

    def my_new_method() 
    ... 
    end 

end 

Sau đó bạn có thể đưa tệp này vào require "array_extended.rb". Đảm bảo bạn không ghi đè các phương thức hiện có vì điều này có thể làm hỏng chức năng khác.

+1

Nhưng bạn đặt yêu cầu "array_extended.rb" ở đâu? Đó là câu hỏi của tôi thực sự. – inglesp

6

Theo mặc định, khi bạn gọi là "đòi hỏi", Rails sẽ tìm trong (từ nguồn cạnh Rails):

ứng dụng app/kim loại ứng dụng/mô hình app/controllers app/người giúp đỡ app/dịch vụ lib nhà cung cấp

Vì mục đích đơn giản, hãy đặt tệp vào lib/và yêu cầu theo tên trong config/environment.rb của bạn hoặc bạn có thể đặt nó trong config/initializers/array_extension.rb và ' sẽ được tải tự động.

Nơi tôi làm việc, chúng tôi đã đặt tất cả các phần mở rộng của chúng tôi vào thư viện Ruby cốt lõi thành một plugin và lưu trữ nó trong (Rails.root /) vendor/plugins/utilities/lib/core_ext, và sau đó chúng tôi yêu cầu các phần mở rộng riêng lẻ trong init.rb. của plugin

Một cách để da mèo này: nếu bạn nói, muốn để lưu trữ các phần mở rộng cốt lõi của bạn trong Rails.root/core_ext, sau đó bạn có thể thêm đường đó như là một con đường tải trong khối cấu hình của bạn trong environment.rb:

Rails::Initializer.run do |config| 
    config.load_paths << 'core_ext' 
end 

Sau đó, bạn có thể gọi "require" array_extension '"từ bất kỳ đâu và nó sẽ tải.

Các vấn đề liên quan