Частичное расположение в Rails 3.0.0 - PullRequest
0 голосов
/ 04 сентября 2010

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

Пример:

# index.html.erb
<%= render :partial => 'sprockets' %>

# _sprockets.html.erb
<%= render :partial => 'sprocket', :layout => 'container' %>
<%= render :partial => 'sprocket', :layout => 'container' %>
<%= render :partial => 'sprocket', :layout => 'container' %>

# _sprocket.html.erb
...

# _container.html.erb
<div class="container"><%= yield %></div>

Дает:

<div class="sprocket"> 
  <div class="sprocket"> 
    ...
  </div> 
  <div class="sprocket"> 
    ...
  </div> 
  <div class="sprocket"> 
    ...
  </div> 
</div> 

Кажется, я помню, что смог сделать это в Rails 2.3.8. Обратите внимание, что выше это упрощение моего кода (я хотел бы сохранить макеты и многочастичный формат). Есть идеи, что я делаю не так? Спасибо!

1 Ответ

1 голос
/ 08 сентября 2010

Возможно, вы используете причуду в ActionView.Насколько я знаю, макеты не предназначены для использования с такими частями.Я предполагаю, что каждый раз, когда вы делаете :layout => 'container', он устанавливает одну и ту же переменную экземпляра.Поскольку ActionView отображает частичные данные наизнанку (самые внутренние части отображаются первыми), последнее используемое значение для :layout также используется выше в цепочке.

Возможно, что-то вроде

# index.html.erb
<%= render :partial => 'sprockets', :layout => false %>

поможет.

Тем не менее я бы сказал, что это неправильный способ получить желаемый результат.

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