Подтвердить что ты не робот

Как вспомогательный метод приводит к блоку в рельсах 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 раза.

Я думаю, что мне не хватает чего-то очевидного, как использовать помощники и уроки. Любые идеи?

4b9b3361

Ответ 1

В Rails 3 вам больше не нужно использовать метод concat для создания содержимого ваших блоков.

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

def box_wrapper(&block)  
  content = capture(&block)  
  content_tag(:div, content, :class => 'box')  
end

Вы можете увидеть другие примеры в Railscasts 208.