在没有轨道的ERB中产量
如何在erb中使用yield进行模板inheritance? 我想在一个简单的ruby CGI脚本中使用erb,并希望使用一个基本模板和子模板,就像它与应用程序模板一样。
我不认为你可以–Rails提供该基础设施作为actionpack的一部分。
您可以做的是采取actionpack并将其添加到您的脚本中。
或者,您可以自己滚动一个轻量级的模板系统。
或者使用Rails或Merb或Sinatra。
def a ERB.new('<%= yield %>').result(binding) end a{123} #=> "123"
重要的是对Kernel#binding
的调用在方法内部,这样上下文包含块( ERB#result
不会占用块)。
查看Tilt( http://github.com/rtomayko/tilt/ )。 它是在Sinatra处理模板的gem,它提供ERB产量以及许多其他不错的function。
您可以使用Tilt,但如果您不想添加额外的依赖项,这里有一个更好的示例,说明如何在erb中产生:
require "erb" class Controller TEMPLATE = ERB.new("Hello <%= @someone %>\n\n<%= yield %>") def initialize(someone) @someone = someone end def render TEMPLATE.result(self.get_binding { yield }) end def get_binding binding end end puts Controller.new("World").render { "I'm Jack" } # => Hello World I'm Jack
我在这里找到了答案。
我写过关于将此添加到标准库的ERB中http://hostiledeveloper.com/2015/05/28/working-with-templates-in-ruby-erb.html
令人惊讶的是,这是一个痛苦的屁股。