在扩展控制器中添加现有助手(Redmine插件开发)

时间:2012-01-09 12:30:15

标签: plugins helper redmine redmine-plugins

任何人都可以通过正确的方式指导我将现有的Helper添加到扩展控制器中,以前不包含此帮助程序。

例如,我在 timelog_controller_patch.rb 中扩展了 timelog_controller.rb 控制器。然后,我尝试添加帮助器查询,这带来了我想要在我的补丁中使用的一些功能。

如果我在我的补丁(我的时间日志扩展控件)中添加帮助器,我总会得到同样的错误:

错误:未初始化的常量Rails :: Plugin :: TimelogControllerPatch(NameError)

以下是我如何做的一个例子:

module TimelogControllerPatch       
    def self.included(base)
        base.send(:include, InstanceMethods)
        base.class_eval do
          alias_method_chain :index, :filters
        end
    end
    module InstanceMethods
        # Here, I include helper like this (I've noticed how the other controllers do it)
        helper :queries
        include QueriesHelper

        def index_with_filters
            # ...
            # do stuff
            # ...
        end
    end # module
end # module patch

但是,当我在原始控制器中包含相同的帮助程序时,一切正常(当然,这不是正确的方法)。

有人能告诉我我做错了什么吗?

提前致谢:)

2 个答案:

答案 0 :(得分:4)

需要在控制器的类上调用helper方法,方法是将它放入模块中,使其无法正常运行。这将有效:

module TimelogControllerPatch       
    def self.included(base)
        base.send(:include, InstanceMethods)
        base.class_eval do
          alias_method_chain :index, :filters
          # 
          # Anything you type in here is just like typing directly in the core
          # source files and will be run when the controller class is loaded.
          # 
          helper :queries
          include QueriesHelper

        end
    end
    module InstanceMethods
        def index_with_filters
            # ...
            # do stuff
            # ...
        end
    end # module
end # module patch

随意查看我在Github上的任何插件,我的大多数补丁都在lib/plugin_name/patches。我知道我在那里添加了一个助手,但我现在找不到它。 https://github.com/edavis10

P.S。不要忘记也需要你的补丁。如果它不在插件的lib目录中,请使用相对路径。

Eric Davis

答案 1 :(得分:0)

或者,如果您不想使用补丁:

Rails.configuration.to_prepare do
  TimelogController.send(:helper, :queries)
end