рельсы частичные макеты с именованным yield - почему блок yield никогда не используется? - PullRequest
12 голосов
/ 25 сентября 2011

У меня есть частичное, с макетом:

<%= render :partial => 'home/mobile/home', :layout => 'home/mobile/page', :locals => {:page => 'abc2'}%>

Макет (page.html.erb) имеет выходы для различных блоков, например:

<div data-role="header">
  <%= yield :header %>
</div>

Однако этот блок yield никогда не используется, в то время как файл макета основного уровня дает результат, как и следовало ожидать.

Нельзя ли использовать именованные блоки content_for / yield с макетами партиалов? Есть ли обходные пути?

Я бы ожидал, что наследование - content_for: header должен сначала искать заголовок yield: в макете партиала, а в противном случае - основной файл макета. Но это не так. Частичный заголовок yield: header просто игнорируется.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2014

В ситуации, аналогичной вашей, я заменил yield вызовом content_for без блока. Так что в вашем примере это будет просто:

<div data-role="header">
  <%= content_for :header %>
</div>

Это сработало для меня. То, что yield в партиалах не проявляется, как вы предполагаете, может быть функцией или ошибкой - но, похоже, именно так оно и работает в Rails 4.1.8, через 3 года:)

0 голосов
/ 26 сентября 2011

Обходной путь может заключаться в том, чтобы обернуть ваш макет во вспомогательный метод, используя blocks (который должен быть в состоянии правильно давать).

Возможно, вы захотите исправить ошибку, связанную с исходной проблемой.

...