html - 如何在 Rails ERB View 中转义 block 中的所有 HTML

标签 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 方法不接受 block 。如果这不是在其他地方内置到 Rails API 中,也许使用一些帮助程序,是否有人建议如何制作自定义帮助程序,其中 yield 语句输出被捕获到一个字符串中,然后我可以自己转义?

谢谢,

基思

最佳答案

Rails 的 captureescape_once 辅助方法可以从 erb 模板中的 block 创建一个 String 并且然后输出它的转义版本:

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

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

解释一下,snippet 是一个 ActiveSupport::SafeBuffer,这就是为什么需要 escape_once。您可以通过调用 snippet.to_str 而不是 escape_once snippet 来实现相同的目的(但是 .to_s 将不起作用,因为它与 不同ActiveSupport::SafeBuffer 中的 .to_str

关于html - 如何在 Rails ERB View 中转义 block 中的所有 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068651/

相关文章:

html - 如何使用 css 更改像 ⬤ 这样的 unicode 圆圈的大小?

css - form_for 显示为 block 和内联元素(ruby on rails,css)

android - GridView 滚动问题

javascript - 同一模型的 Backbone 两个不同 View

html - 在 HTML 中将 Tab 字符(在 PRE 元素中)呈现为 4 个空格?

javascript - 使用表单验证隐藏和显示 Div

html - 在不移动其他文本的情况下增加字体大小

ruby-on-rails - NilClass :Class 的 Rails 未定义方法 `model_name'

ruby-on-rails - has_many :through with counter_cache

ios - 点击后退按钮后,通过 segue 的数据丢失