ruby-on-rails – 如何转义yield返回的值

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何转义yield返回的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近有一个问题是逃避模板中的yield返回的值.

在我的布局中,我产生了元描述,以便我可以从我的模板中定义它

<Meta name="description" content="<%= yield :html_description %>" />@H_403_5@ 
 

这是我的模板,不幸的是,并没有像预期的那样逃避价值:

<% content_for :html_description,'hello "you" guy' %>
<Meta name="description" content="hello "you" guy" />@H_403_5@ 
 

我试图用h()escaper逃脱它,但它不起作用:

<Meta name="description" content="<%= h(yield :html_description) %>" />
<Meta name="description" content="hello "you" guy" />@H_403_5@ 
 

我也尝试使用escape_once(),但它做得太多了:

<Meta name="description" content="<%= escape_once(yield :html_description) %>" />
<Meta name="description" content="hello &amp;quot;you&amp;quot; guy" />@H_403_5@ 
 

但是,通过将返回的值与字符串连接起来,它可以解决问题:

<Meta name="description" content="<%= '' + (yield :html_description) %>" />
<Meta name="description" content="hello &quot;you&quot; guy" />@H_403_5@ 
 

有谁理解这种行为?

你有一个比这个串联更好的解决方案,巧合吗?

我正在使用Rails 2.3.8 – 谢谢!

解决方法

对于Meta,img或br等自闭合标记,可以使用“tag”方法.
<%= tag(:Meta,:name => 'description',:content => yield(:html_description)) %>@H_403_5@ 
 

这给了你

<Meta content="&quot;I am surrounded by quotes&quot;" name="description" />@H_403_5@

猜你在找的Ruby相关文章