本质上我想要如下内容:
<code class="snippet">
<%= html_escape do %>
<a href="#">My markup displayed to user</a>
<% end %>
</code>
但是 html_escape 方法不接受 block 。如果这不是在其他地方内置到 Rails API 中,也许使用一些帮助程序,是否有人建议如何制作自定义帮助程序,其中 yield 语句输出被捕获到一个字符串中,然后我可以自己转义?
谢谢,
基思
最佳答案
Rails 的 capture
和 escape_once
辅助方法可以从 erb
模板中的 block 创建一个 String
并且然后输出它的转义版本:
<% snippet = capture do %>
<a href="#">My markup displayed to user</a>
<% end %>
<code><%= escape_once snippet %></code>
content_for
是另一个 helper,提供与 capture
类似的功能,您可以根据情况考虑使用。
解释一下,snippet
是一个 ActiveSupport::SafeBuffer
,这就是为什么需要 escape_once
。您可以通过调用 snippet.to_str
而不是 escape_once snippet
来实现相同的目的(但是 .to_s
将不起作用,因为它与 不同
。ActiveSupport::SafeBuffer
中的 .to_str
关于html - 如何在 Rails ERB View 中转义 block 中的所有 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068651/