これは 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)