2011-09-25 6 views
11

Ho un parziale, con un layout:layout di rotaie parziali con resa denominata - perché il blocco di rendimento non viene mai utilizzato?

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

Il layout (page.html.erb) ha rese per diversi blocchi, quali:

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

Tuttavia, questo blocco resa è mai usato, mentre il file di layout di livello principale produce come ci si aspetterebbe.

È impossibile utilizzare named content_for/yield blocks con i layout di partial? Esistono soluzioni alternative?

Mi aspetto l'ereditarietà content_for: l'intestazione deve prima cercare una resa: intestazione nel layout parziale e, in mancanza, il file di layout principale. Ma questo non è il caso. Il rendimento del layout parziale: l'intestazione viene semplicemente ignorata.

risposta

0

La soluzione alternativa sarebbe quella di avvolgere il layout in un metodo di supporto utilizzando blocks (che dovrebbe essere in grado di produrre correttamente).

È possibile che si verifichi un bug relativo al problema originale.

+0

pensa che devo hackerarlo un po 'per farlo funzionare con i binari 3 – numbers1311407

2

In una situazione simile alla tua, ho sostituito il yield con una chiamata a content_for senza un blocco. Quindi nel tuo esempio sarebbe semplicemente:

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

Questo ha funzionato per me. Quelle yield in partials non si rivelano come suggerite potrebbe essere una funzionalità o un bug, ma sembra che continui a funzionare in Rails 4.1.8, 3 anni dopo la riga :)