2

我正在寫我的第一個軌道插件。該插件應該延長的ActionController ::基地插件擴展軌道的actioncontroller

通過這裏的教程要經過這麼是我做過什麼......

# Foo 
class << ActionController::Base 
    def function_name 

假設該插件叫做foo ...但是當我打電話函數名從一個動作,沒有任何反應......似乎甚至沒有調用function_name。沒有方法丟失錯誤,所以我相信這個插件也被加載了太多...

m卡住真的不好!

回答

2

您需要在ActionController中包含一個類。

module Foo 
    def function_name 
    end 
end 

ActionController::Base.send(:include, Foo) 
11

你應該通過ON_LOAD掛鉤做到這一點:

ActiveSupport.on_load(:action_controller) do 
    include Foo 
end 

這將推遲包括模塊,直到ActionController的::基地將正常加載。這將避免AC::Base過早加載,這可以節省許多Rake任務和加載控制檯時的一些加載時間。