Я хочу определить помощники вида в 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
правильным подходом для этого? Или есть другая точка входа, которую я мог бы использовать (которая, возможно, обеспечивает лучший подход к перезагрузке?)