基本上我想要以下内容:
<code class="snippet">
<%= html_escape do %>
<a href="#">My markup displayed to user</a>
<% end %>
</code>
但是html_escape方法不接受块。如果这不是在其他地方的Rails API中构建的,也许使用一些帮助器,是否有人有关于如何创建自定义帮助器的建议,其中yield语句输出被捕获到一个我可以自己逃脱的字符串中?
谢谢,
基思
答案 0 :(得分:4)
Rails'capture
和escape_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_str
中的ActiveSupport::SafeBuffer
不同。