Как вспомогательный метод уступает блоку в рельсах 3? - PullRequest
12 голосов
/ 04 апреля 2011

Я использовал этот шаблон для нескольких помощников в рельсах 2, но он не работает в рельсах 3. Я хочу, чтобы вспомогательный метод генерировал некоторые HTML-теги с содержимым, вложенным внутрь.Вот основной пример того, что я пытаюсь получить:

<div class="box">
  my content
</div>

В rails 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 он отображает всесодержание страницы во второй раз.

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

1 Ответ

31 голосов
/ 04 апреля 2011

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

Ваш помощник теперь выглядит так:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...