Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

I partial

Riutilizzare lo stesso codice inserendolo in viste differenti
Riutilizzare lo stesso codice inserendolo in viste differenti
Link copiato negli appunti

Un altro utile meccanismo per tenere in ordine il codice delle viste è rappresentato dai partial. Con i partial è possibile estrarre una porzione di codice da una vista e salvarla in un file esterno; il codice estratto nel partial può essere condiviso da differenti viste e può essere tanto codice HTML statico quanto codice dinamico erb.

Apriamo il file app/views/bookmarks/index.html.erb; da questo file tagliamo il codice per la visualizzazione dei singoli bookmark e incolliamolo in un nuovo file dal nome app/views/bookmarks/_single_bookmark.html.erb; il file _single_bookmark.html.erb è un partial (i partial si riconoscono per l'underscire come suffisso del nome del file che li contengono) e contiene solo il seguente codice:

<li>
	<strong><%= link_to bookmark.title, bookmark.url %></strong><br />
	<%= bookmark.description %><br />
	Tag:
	<% for tag in bookmark.tag_list %>
	<%= link_to tag, :controller => "tags", :action => "show", :id => tag %>
	<% end %><br />
	<small>
	<%= link_to 'Show', bookmark %> |
	<%= link_to 'Edit', edit_bookmark_path(bookmark) %> |
	<%= link_to 'Destroy', bookmark,
		:confirm => 'Are you sure?',
		:method => :delete %>
	</small>
</li>

Nella vista index.html.erb sostituiamo il codice che è stato estratto con l'istruzione per l'inclusione del partial:

<h1>Listing bookmarks</h1>
<ul>
	<% for bookmark in @bookmarks %>
	<%= render :partial => "single_bookmark", :locals => { :bookmark => bookmark } %>
	<% end %>
</ul>

<br />

<%= link_to 'New bookmark', new_bookmark_path %>

L'istruzione render inserita nel ciclo for richiede l'inclusione del partial di nome single_bookmark assegnando alla variabile locale bookmark il valore dell'iteratore del ciclo for.

Abbiamo detto che uno stesso partial può essere utilizzato da viste differenti; modifichiamo allora la vista app/views/tags/show.html.erb per includere il partial così come fatto per la vista appena modificata. Poiché il parziale non risiede nella stessa cartelle della vista, app/views/tags ma nella cartella app/views/bookmarks sarà necessario indicare il percorso completo del partial:

<h1>Listing bookmarks with tag "<%= @tag %>"</h1>
<ul>
	<% for bookmark in @bookmarks %>
	<%= render :partial => "bookmarks/single_bookmark", :locals => { :bookmark => bookmark } %>
	<% end %>
</ul>

<br />

<%= link_to 'New bookmark', new_bookmark_path %>

Accedendo con il browser alle pagine di elenco dei bookmark e visualizzazione dei bookmark per un determinato tag, osserviamo come il partial viene utilizzato per la generazione delle differenti viste.

L'utilizzo dei partial è fortemente consigliato quando si verifica una delle seguenti situazioni:

  • il codice di una vista è corposo, ed è difficile individuare le differenti parti della pagina; estraendo porzioni di codice in partial esterni il codice della vista risulterà più chiaro
  • differenti viste, anche di controller differenti, hanno porzioni di codice in comune; estraendo queste parti di codice in un partial esterno da includere nelle differenti viste si concentra in un solo posto codice che di fatto è ripetuto in differenti parti dell'applicazione

È bene ricordare che è necessario rendere disponibile al partial tutte le variabili di cui ha bisogno per la sua corretta renderizzazione; un partial non condivide automaticamente le variabili con la vista che lo utilizza. Per rendere disponibili le variabili è necessario utilizzare il parametro :locals => come nell'esempio precedente.

Ti consigliamo anche