Добавить существующий помощник в расширенный контроллер (Redmine Plugin Dev) - PullRequest
2 голосов
/ 09 января 2012

Может ли кто-нибудь помочь мне правильно добавить существующего помощника в расширенный контроллер , который ранее не содержал этого помощника.

Например, я расширил timelog_controller.rb контроллер в timelog_controller_patch.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 ]

4 голосов
/ 14 января 2012

Метод 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

PS Не забудьте и ваш патч.Если его нет в каталоге lib вашего плагина, используйте относительный путь.

Eric Davis

0 голосов
/ 18 октября 2013

В качестве альтернативы, если вы не хотите делать это с патчем:

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