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 回答