2

本质上,我想要以下内容:

<code class="snippet">
   <%= html_escape do %>
      <a href="#">My markup displayed to user</a>
   <% end %>
</code>

但是 html_escape 方法不接受块。如果这不是在其他地方内置到 Rails API 中,也许使用了一些帮助器,是否有人对如何制作自定义帮助器有建议,其中 yield 语句输出被捕获到一个字符串中,然后我可以自己逃避?

谢谢,

基思

4

1 回答 1

7

Railscaptureescape_once辅助方法可以String从模板中的块创建一个erb,然后输出它的转义版本:

<% 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_strin不同ActiveSupport::SafeBuffer)。

于 2013-12-13T12:08:09.983 回答