Как вспомогательный метод приводит к блоку в рельсах 3?
Я использовал этот шаблон для ряда помощников в rails 2, но он не работает то же самое в rails 3. Моя цель состоит в том, чтобы хелпер-метод генерировал некоторые html-теги с содержимым, вложенным внутри. Вот базовый пример того, что я пытаюсь получить:
<div class="box">
my content
</div>
В рельсах 2 я делаю это так:
внутри моего файла макета Я вызываю вспомогательный метод:
<% box_wrapper do %>
<%= yield -%>
<% end %>
Вспомогательный метод определяется следующим образом:
def box_wrapper
concat <<-EOF.html_safe
<div class="box">
EOF
yield if block_given?
concat <<-EOF.html_safe
</div>
EOF
end
Но в рельсах 3 при просмотре представления он выводит мою всю страницу, а затем внутри box_wrapper
он отображает все содержимое страницы в 2 раза.
Я думаю, что мне не хватает чего-то очевидного, как использовать помощники и уроки. Любые идеи?
Ответы
Ответ 1
В Rails 3 вам больше не нужно использовать метод concat
для создания содержимого ваших блоков.
Теперь ваш помощник выглядит следующим образом:
def box_wrapper(&block)
content = capture(&block)
content_tag(:div, content, :class => 'box')
end
Вы можете увидеть другие примеры в Railscasts 208.