这是在 Redmine 1.3 中。
我正在修补 ApplicationController 以在所有控制器中添加行为(实际上,只是为了包含一个帮助器)。问题是在我的 ApplicationController 补丁之前修补的任何控制器都没有获得新的行为。
这工作正常:
Dispatcher.to_prepare :my_plugin do
require_dependency 'my_plugin/application_controller_patch'
require_dependency 'my_plugin/welcome_controller_patch'
end
但是这样一来,当我调用我添加的助手时,WelcomeController 会引发错误。
Dispatcher.to_prepare :my_plugin do
require_dependency 'my_plugin/welcome_controller_patch'
require_dependency 'my_plugin/application_controller_patch'
end
这很容易在插件中修复,但我遇到的问题是另一个插件正在修补控制器,随后它失去了我的修复。更糟糕的是,这只发生在生产中——在开发中,我认为插件顺序不同,因为它工作正常。我没有看到改变插件顺序的方法。
我很确定我的补丁本身很好,但以防万一它看起来像这样:
require_dependency 'application_controller'
module MyPlugin::ApplicationControllerPatch
def self.included(base) # :nodoc:
base.extend(ClassMethods)
base.send(:include, InstanceMethods)
base.class_eval do
unloadable
helper :search
include SearchHelper
end
end
module ClassMethods
end
module InstanceMethods
end # of InstanceMethods
end # of module
ApplicationController.send(:include, MyPlugin::ApplicationControllerPatch)