我想在运行时在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
正确的方法吗?或者是否有我可以使用的另一个入口点(可能提供更好的重新加载方法?)