Se ho un tag <%= yield %>
, tutte le mie viste vengono visualizzate nello stesso punto del layout. Posso avere tag diversi <%= yield %>
per visualizzazioni diverse? È così come lo faccio? GrazieRuby on rails: cessione di viste specifiche in un punto specifico nel layout
risposta
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 %>
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
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 %>
È possibile utilizzare la resa e contenuti per:
For example:
<%= yield :head %>
<% content_for :head do %>
<title>A simple page</title>
<% end %>
- consultare: layout and rendering guide.
È importante in quale cartella si trova la vista con contenuto? Che dire di quale controller è la vista? – holaSenor