Перезагрузка динамически определенных помощников - PullRequest
0 голосов
/ 06 мая 2018

Я хочу определить помощники вида в Rails 5.2.0 во время выполнения (из некоторого кода, который находится в моей папке lib и / или некотором инициализаторе), и я до сих пор придумал такой подход:

def new_module
  Module.new do
    def self.create_method(name, &block)
      define_method(name, &block)
    end
  end
end

def define_dynamic_helper(name, &block)
  helpers = new_module
  helpers.create_method(name, &block)
  ActionView::Base.send :include, helpers
end

Теперь, когда я могу определить динамические модули, которые включаются в ActionView::Base во время выполнения, я называю их, например, в моем контроллере так:

define_dynamic_helper("my_helper") do
  "some data"
end

И мой взгляд использует такой помощник

<%= my_helper %>

Но у этого есть недостаток во время разработки: когда я удаляю строку, которая определяет моего помощника, она все еще доступна, но я ожидаю ошибку MethodMissing. И, как вы можете догадаться, это может привести к очень сложным ситуациям для отладки.

Итак, у меня есть два вопроса:

  • Можно ли полностью удалить все динамические помощники, когда Rails выполняет перезагрузку во время разработки? Могу ли я использовать какой-нибудь крючок?
  • Является ли использование ActionView::Base.send :include, helpers правильным подходом для этого? Или есть другая точка входа, которую я мог бы использовать (которая, возможно, обеспечивает лучший подход к перезагрузке?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...