如何在 Rails ERB 视图中转义块中的所有 HTML

kgx*_*kgx 2 html escaping ruby-on-rails erb view

基本上我想要如下内容:

<code class="snippet">
   <%= html_escape do %>
      <a href="#">My markup displayed to user</a>
   <% end %>
</code>
Run Code Online (Sandbox Code Playgroud)

但是 html_escape 方法不接受块。如果这不是在其他地方构建到 Rails API 中,也许使用一些帮助程序,有没有人有关于如何制作自定义帮助程序的建议,其中 yield 语句输出被捕获到一个字符串中,然后我可以自己转义?

谢谢,

基思

Eli*_*kes 5

Railscaptureescape_oncehelper 方法可以Stringerb模板中的块创建一个,然后输出它的转义版本:

<% snippet = capture do %>
    <a href="#">My markup displayed to user</a>
<% end %>
<code><%= escape_once snippet %></code>
Run Code Online (Sandbox Code Playgroud)

content_for是另一个提供与 类似功能的助手,capture您可以根据情况考虑使用。

解释一下,snippet是一个ActiveSupport::SafeBuffer,这就是为什么escape_once需要。您可以通过调用snippet.to_str而不是来实现相同的效果escape_once snippet(但是.to_s不会起作用,因为它与.to_strin不同ActiveSupport::SafeBuffer)。