如何将erubi模板渲染为html?

Ado*_*obe 5 ruby erb

当 Rails 5.1+ 切换到时,erubi我尝试在 ruby​​ 脚本中使用它:

require 'erubi'

template = Erubi::Engine.new("<%= test %>", escape: true)
Run Code Online (Sandbox Code Playgroud)

然而,我正在尝试将该模板渲染为 html。

erubi源代码: https: //github.com/jeremyevans/erubi


erubi是 的 fork erubis,并且在erubis渲染中是通过result方法完成的:

require 'erubis'

template = Erubis::Eruby.new("<%= test %>", escape: true)
template.result test: "<br>here" #=> "&lt;br&gt;here"
Run Code Online (Sandbox Code Playgroud)

然而 中没有result方法erubi

mat*_*att 4

从 Erubi 自述文件(它说 \xe2\x80\x9c 对于文件 \xe2\x80\x9d 但它似乎意味着 \xe2\x80\x9c 对于模板 \xe2\x80\x9d):

\n
\n

Erubi 仅内置支持检索文件生成的源:

\n
require \'erubi\'\neval(Erubi::Engine.new(File.read(\'filename.erb\')).src)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

因此,您将需要使用其中一种eval变体来从独立脚本运行。

\n
template = Erubi::Engine.new("7 + 7 = <%= 7 + 7 %>")\nputs eval(template.src)\n
Run Code Online (Sandbox Code Playgroud)\n

输出7 + 7 = 14

\n

如果您希望能够像在 Rails、Sinatra 等中那样在模板中使用实例变量,则需要创建一个上下文对象并使用instance_eval

\n
class Context\n  attr_accessor :message\nend\n\ntemplate = Erubi::Engine.new("Message is: <%= @message %>")\ncontext = Context.new\ncontext.message = "Hello"\n\nputs context.instance_eval(template.src)\n
Run Code Online (Sandbox Code Playgroud)\n

输出Message is: Hello

\n