如何在Rails ERB视图中转义块中的所有HTML

时间:2013-04-17 19:33:30

标签: html ruby-on-rails view escaping erb

基本上我想要以下内容:

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

但是html_escape方法不接受块。如果这不是在其他地方的Rails API中构建的,也许使用一些帮助器,是否有人有关于如何创建自定义帮助器的建议,其中yield语句输出被捕获到一个我可以自己逃脱的字符串中?

谢谢,

基思

1 个答案:

答案 0 :(得分:4)

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

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

content_for是另一个提供与capture类似功能的助手,您可以根据具体情况考虑使用。

对于奖励积分,snippetActiveSupport::SafeBuffer,因此需要escape_once。您可以通过调用snippet.to_str而不是escape_once snippet来实现相同目标(但.to_s将无法正常工作,因为它与.to_str中的ActiveSupport::SafeBuffer不同。

相关问题