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 语句输出被捕获到一个字符串中,然后我可以自己转义?
谢谢,
基思
Railscapture和escape_oncehelper 方法可以String从erb模板中的块创建一个,然后输出它的转义版本:
<% 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)。