2011-09-22 8 views

risposta

22

Cerca in ActionView::Helpers::CaptureHelper. Si può fare qualcosa di simile in vostro punto di vista:

<% content_for :sidebar do %> 
    <!-- sidebar content specific to this page --> 
<% end %> 

Questo verrà eseguito il modello all'interno del blocco content_for, ma non emetterà come parte del normale modello yield buffer, sarà memorizzato in un buffer separato per dopo . Poi più tardi, anche nel layout, è possibile utilizzare yield :content_name per emettere il contenuto:

<div class="content"> 
    <%= yield %> 
</div> 

<div class="sidebar"> 
    <%= yield :sidebar %> 
</div> 

Quindi, in un certo senso si può avere diverse yield s per diversi punti di vista, non resta che dare il contenuto diverso un nome con content_for nelle viste e rendetelo con lo stesso nome nel layout.

Considera il tuo caso, in cui desideri visualizzazioni diverse in luoghi diversi. Supponiamo che tu abbia tre pannelli, panel1, panel2 e panel3. È possibile farlo nel layout:

<div id="panel1"><%= yield :panel1 %></div> 
<div id="panel2"><%= yield :panel2 %></div> 
<div id="panel3"><%= yield :panel3 %></div> 

Non c'è nemmeno bisogno di includere una pianura <%= yield %> se non si vuole. Quindi, nelle visualizzazioni, è possibile scegliere il pannello in cui visualizzare il contenuto circondando l'intera vista con l'appropriato content_for. Ad esempio, uno dei vostri punti di vista potrebbe essere modificata in questo modo:

<% content_for :panel2 do %> 
    <!-- Your View --> 
<% end %> 

di mostrare in Pannello 2. Un altro potrebbe essere destinato per il pannello 3, in questo modo:

<% content_for :panel3 do %> 
    <!-- Your View --> 
<% end %> 
+0

Questo è utile per i titoli di pagina, in cui si desidera personalizzare la maggior parte della pagina Egbert, ma si finisce per doverlo specificare in ogni pagina. Ciò non fa bene a cose come nascondere le barre laterali solo sulle pagine di autenticazione. – ahnbizcad

1

Sì, è possibile avere più tag <%= yield %>. È possibile specificare ciascun tag yield con nomi come questi nella vista di base.

<%= yield :head %>

<%= yield :footer %>

quindi utilizzare il tag content_for nel vostro punto di vista individuale.

<% content_for :head do %> 
    <%= stylesheet_link_tag 'custom' %> 
<% end %> 
0

È possibile utilizzare la resa e contenuti per:

For example: 
<%= yield :head %> 
<% content_for :head do %> 
    <title>A simple page</title> 
<% end %>