У меня недавно возникла проблема с экранированием значения, возвращаемого 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 &quot;you&quot; guy" />
Однако, объединяя возвращенное значение со строкой, это решает проблему:
<meta name="description" content="<%= '' + (yield :html_description) %>" />
<meta name="description" content="hello "you" guy" />
Кто-нибудь понимает это поведение?
Есть ли у вас лучшее решение, чем эта конкатенация, которая исправит его по совпадению?
Я использую Rails 2.3.8 - Спасибо!