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任务和加载控制台时的一些加载时间。