重新加载动态定义的助手

时间:2018-05-06 10:25:15

标签: ruby-on-rails

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

0 个答案:

没有答案