实现Rails 3模板处理程序

时间:2011-06-16 18:44:08

标签: ruby-on-rails-3 actionview

似乎没有太多关于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方法。

那么有人可以向我解释一下这是如何工作的吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

我自己一直在经历这个问题。基本上rails希望渲染器的.call方法返回将呈现模板的ruby代码。然后运行此代码的dynamically generates a method,并将其注入模块。

该模块包含所有url / application helper,这意味着它们都在模板的范围内。

因此,在回答您的问题时,解决方案是.call返回一些ruby代码,将您呈现的模板作为字符串输出,或者用于呈现调用模板引擎的ruby代码。

答案 1 :(得分:0)

查看tilttemple,我学到了很多关于模板引擎阅读代码的知识。