似乎没有太多关于Rails模板处理程序的文档。包括RJS,ERB和Builder在内的处理程序可以提供一些帮助。
我正在尝试实现自己的,并且我已经成功了,虽然有一些奇怪的代码,或者可能有一些我不太了解的东西。
class MyHandler < ActionView::Template::Handler
def call(template)
template.source.inspect
end
end
所以奇怪的是我必须调用inspect
,否则Rails会尝试将字符串作为Ruby代码进行评估。
我的印象是include ActionView::...::Compilable
所做的(我的代码中没有包含这些内容)。
现在,如果我将模板设置为“可编辑”(使用include...
语句),它仍然会查找call
方法而不是compile
方法。
那么有人可以向我解释一下这是如何工作的吗?
谢谢!
答案 0 :(得分:4)
我自己一直在经历这个问题。基本上rails希望渲染器的.call
方法返回将呈现模板的ruby代码。然后运行此代码的dynamically generates a method,并将其注入模块。
该模块包含所有url / application helper,这意味着它们都在模板的范围内。
因此,在回答您的问题时,解决方案是.call
返回一些ruby代码,将您呈现的模板作为字符串输出,或者用于呈现调用模板引擎的ruby代码。
答案 1 :(得分:0)