2010-09-03 6 views
0

J'ai une collection de partiels rendus en utilisant une mise en page pour chaque élément (emballage dans un conteneur). Cependant, lors du rendu de la collection, un extérieur « conteneur » est également ajouté (il semble Adde à chaque rendre, malgré l'absence de mise en page étant préciséMise en page partielle dans Rails 3.0.0

Exemple:.

# 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> 

donne:

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

Je me souviens d'avoir été capable de faire cela dans Rails 2.3.8 Notez que ceci est une simplification de mon code (je voudrais garder les mises en page et le format multi-partiel). mal? Merci!

Répondre

1

Vous utilisez probablement une anomalie dans ActionView. Au meilleur de ma connaissance, les dispositions ne sont pas destinées à être utilisées avec des partiels comme ça. Ma conjecture est, chaque fois que vous faites :layout => 'container', il définit la même variable d'instance. Comme ActionView rend les partiels à l'envers (la partie la plus interne est rendue en premier), la dernière valeur utilisée pour :layout est également utilisée plus haut dans la chaîne.

peut-être faire quelque chose comme

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

vous aidera.

Pourtant, je dirais que ce n'est pas une bonne façon d'obtenir les résultats que vous voulez.

Questions connexes