Как обернуть содержимое в HTML в помощнике Rails - PullRequest
9 голосов
/ 10 марта 2011

Я хочу обернуть некоторый контент в HTML во вспомогательный Rails 3, чтобы, на мой взгляд, я мог сделать это:

<%= rounded_box do-%>
  <%= raw target.text %>
<% end -%>

У меня есть вспомогательный метод, который выглядит следующим образом:

def rounded_box(&block)
  str = "<div class='rounded_box'><div class='rounded_box_content'><div class='rounded_box_top'></div>        
  str << yield
  str << "<div class='rounded_box_bottom'><div></div></div></div>"
  raw str
end

То, как у меня это получается, теперь возвращает содержимое, правильно завернутое в строку HTML, но не перед рендерингом какого-либо erb в блоке rounded_box (например, в этом случае target.text визуализируется дважды, один раз упакован, один раз нет).

Есть ли лучший способ сделать это?Для простоты я бы хотел избежать использования content_tag, но если это единственный / лучший способ, которым я могу это сделать.

Ответы [ 2 ]

18 голосов
/ 10 марта 2011

Звоните capture на блок вместо yield:

def rounded_box(&block)
  str = "<div class='rounded_box'><div class='rounded_box_content'><div class='rounded_box_top'></div>"        
  str << capture(&block)
  str << "<div class='rounded_box_bottom'><div></div></div></div>"
  raw str
end
0 голосов
/ 10 марта 2011

Измените <%= raw target.text %> на <% raw target.text %>, а ERB должен обработать все остальное.Вам не нужно явно выводить результат промежуточного тега ERB, потому что он был обработан помощником.

...