当 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" #=> "<br>here"
Run Code Online (Sandbox Code Playgroud)
然而 中没有result方法erubi。
从 Erubi 自述文件(它说 \xe2\x80\x9c 对于文件 \xe2\x80\x9d 但它似乎意味着 \xe2\x80\x9c 对于模板 \xe2\x80\x9d):
\n\n\nErubi 仅内置支持检索文件生成的源:
\nRun Code Online (Sandbox Code Playgroud)\nrequire \'erubi\'\neval(Erubi::Engine.new(File.read(\'filename.erb\')).src)\n
因此,您将需要使用其中一种eval变体来从独立脚本运行。
template = Erubi::Engine.new("7 + 7 = <%= 7 + 7 %>")\nputs eval(template.src)\nRun Code Online (Sandbox Code Playgroud)\n输出7 + 7 = 14。
如果您希望能够像在 Rails、Sinatra 等中那样在模板中使用实例变量,则需要创建一个上下文对象并使用instance_eval:
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)\nRun Code Online (Sandbox Code Playgroud)\n输出Message is: Hello。