如何在不使用 escape_html 包装代码的情况下将 slim 转换为 erb?

Ste*_*eve 5 ruby-on-rails erb slim-lang

我正在将多个 html.slim 文件转换为 html.erb。在遵循了大量有关堆栈溢出的精彩建议和技巧之后,我已经基本完成了,但我对生成的 html.erb 代码并不满意。我知道它不会是完美的,但我Temple::Utils.escape_html((...))在链接中得到了额外的信息,如下所示:

<%= ::Temple::Utils.escape_html((link_to "Jobs", jobs_path)) %>

我终于在这里找到了Dimitry_N(Stack Overflow)的答案,但即使我--rails按照他的建议传递了标志,我仍然得到了多余的代码。

我遇到过一两个正则表达式选项来在创建文件删除附加代码,但我希望找到一些扩展 Dimitry 答案的内容,以便它们不会首先插入。

有没有人经历过这个或知道解决方案?

Ale*_*lex 1

escape_html来自Temple ,它是Slim引擎配置一部分

filter :Escapable
Run Code Online (Sandbox Code Playgroud)

Temple::Filters::Escapeable有一个disable_escape选项。我在弄清楚的同时做了这个:

class ERBConverter < Slim::Engine
  replace :StaticMerger, Temple::Filters::CodeMerger
  replace :Generator, Temple::Generators::ERB
  replace(:Escapable, :Escapable) { Temple::Filters::Escapable.new(disable_escape: true) }
end
Run Code Online (Sandbox Code Playgroud)
puts ERBConverter.new.call(File.read("test.html.slim"))

<div class="flex bg-red-500">
<%= link_to "link", link_path, class: "a" %>
</div>
Run Code Online (Sandbox Code Playgroud)

但后来注意到了--optionflag,你可以将它传递给slimrb

$ slimrb -e -o disable_escape=true test.html.slim

<div class="flex bg-red-500">
<%= link_to "link", link_path, class: "a" %>
</div>
Run Code Online (Sandbox Code Playgroud)

https://rubydoc.info/gems/slim/frames#available-options