我最近遇到了一个问题,那就是要逃避模板中yield所返回的值。

在我的布局中,我生成了元描述,以便可以从模板中对其进行定义

<meta name="description" content="<%= yield :html_description %>" />

这是我的模板,不幸的是,它并没有逃避预期的值:
<% content_for :html_description, 'hello "you" guy' %>
<meta name="description" content="hello "you" guy" />

我试图用h()逃逸器对其进行转义,但是它不起作用:
<meta name="description" content="<%= h(yield :html_description) %>" />
<meta name="description" content="hello "you" guy" />

我也尝试过使用escape_once(),但是它做的太多了:
<meta name="description" content="<%= escape_once(yield :html_description) %>" />
<meta name="description" content="hello &amp;quot;you&amp;quot; guy" />

但是,通过将返回值与字符串连接起来,可以解决此问题:
<meta name="description" content="<%= '' + (yield :html_description) %>" />
<meta name="description" content="hello &quot;you&quot; guy" />

有人了解这种行为吗?

您是否有比通过巧合来解决的串联更好的解决方案?

我正在使用Rails 2.3.8-谢谢!

最佳答案

对于自封闭标签,例如meta,img或br,可以使用“tag”方法。

<%= tag(:meta, :name => 'description', :content => yield(:html_description)) %>

这给你
<meta content="&quot;I am surrounded by quotes&quot;" name="description" />

10-06 13:27