如何将 erubi 模板渲染为 html?

How to render erubi template to html?

随着 rails 5.1+ 切换到 erubi 我尝试在 ruby 脚本中使用它:

require 'erubi'

template = Erubi::Engine.new("<%= test %>", escape: true)

但是我正在尝试将该模板呈现为 html。

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


erubierubis 的分支,在 erubis 中渲染是通过 result 方法完成的:

require 'erubis'

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

但是 erubi 中没有 result 方法。

From the Erubi README(它说“for a file”但它似乎是“for a template”的意思):

Erubi only has built in support for retrieving the generated source for a file:

require 'erubi'
eval(Erubi::Engine.new(File.read('filename.erb')).src)

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

template = Erubi::Engine.new("7 + 7 = <%= 7 + 7 %>")
puts eval(template.src)

输出 7 + 7 = 14.

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

class Context
  attr_accessor :message
end

template = Erubi::Engine.new("Message is: <%= @message %>")
context = Context.new
context.message = "Hello"

puts context.instance_eval(template.src)

输出 Message is: Hello.

在 rails 5.1 中,我将 Erubis::Eruby.new 代码切换为以下代码:

ActionController::Base.render(inline: "<%= test %>", locals: {test: "<br>here"})

Rails 会做繁重的工作。