1

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

1 に答える 1

1

もちろん、一度行って質問してみればわかります。

config/additional_environment.rb の行

config.plugins = [ :my_plugin, :all ]

私のプラグインが最初にロードされるようにします。これにより、動作が修正されたようです。

于 2012-06-04T18:22:29.987 に答える