这是在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)
答案 0 :(得分:1)
当然,一旦我离开并问了这个问题,我就弄清楚了。
在config / additional_environment.rb中,行
config.plugins = [ :my_plugin, :all ]
确保首先加载我的插件。这似乎已经解决了这种行为。