[英]How to escape all HTML in a block in Rails ERB view
基本上我想要如下内容:
<code class="snippet">
<%= html_escape do %>
<a href="#">My markup displayed to user</a>
<% end %>
</code>
但是 html_escape 方法不接受块。 如果这不是在其他地方构建到 Rails API 中,也许使用一些帮助程序,有没有人有关于如何制作自定义帮助程序的建议,其中 yield 语句输出被捕获到一个字符串中,然后我可以自己转义?
谢谢,
基思
Rails 的capture
和escape_once
辅助方法可以从erb
模板中的块创建一个String
,然后输出它的转义版本:
<% snippet = capture do %>
<a href="#">My markup displayed to user</a>
<% end %>
<code><%= escape_once snippet %></code>
content_for
是另一个提供与capture
类似功能的助手,您可以根据情况考虑使用。
解释一下, snippet
是一个ActiveSupport::SafeBuffer
,这就是为什么需要escape_once
。 你可以通过调用达到同样snippet.to_str
代替escape_once snippet
(但是.to_s
将无法工作,因为这是不同的,以.to_str
中ActiveSupport::SafeBuffer
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.