我正在写第一个有关rails的插件。该插件应该扩展actioncontroller :: base
所以在完成这里的教程之后就是我做的......
# Foo
class << ActionController::Base
def function_name
假设插件被称为foo ...但是当我从一个动作调用function_name时,没有任何反应......似乎甚至没有调用function_name。没有方法丢失错误,所以我确定插件也已加载...
真的很糟糕!答案 0 :(得分:11)
你应该通过on_load钩子来做到这一点:
ActiveSupport.on_load(:action_controller) do
include Foo
end
这将推迟包括模块,直到ActionController :: Base正常加载。这样可以避免AC::Base
过早加载,这可以在许多Rake任务和加载控制台时节省一些加载时间。
答案 1 :(得分:2)
您需要在ActionController中包含一个类。
module Foo
def function_name
end
end
ActionController::Base.send(:include, Foo)