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

I Partial di Ruby on Rails

I partial di Ruby: porzioni di codice che consentono di includere codice in viste differenti
I partial di Ruby: porzioni di codice che consentono di includere codice in viste differenti
Link copiato negli appunti

I layout sono uno strumento straordinario per evitare la duplicazione di codice, ma non sono gli unici messi a disposizione da Rails. In particolare è possibile prendere dei pezzetti di pagina e renderli riutilizzabili, creando i cosiddetti partial

Un partial non è altro che un ritaglio di codice, messo in un file chiamato _qualcosa.rhtml. Notate la presenza di un underscore iniziale, che serva  a far sì che esso non venga interpretato come un'azione. 

Mentre i layout servono a condividere il codice che fa da cornice alla pagina, i partial sono particolarmente utili nel caso in cui si vogliano riutilizzare degli elementi tra viste differenti e ancora di più quando ci sono elementi multipli.

Per esempio, in un Weblog la prima pagina contiene quasi sempre un certo numero di post, e poi è possibile accedere a un singolo post per vedere anche i commenti. Il pezzo di codice relativo alla visualizzazione del messaggio, che si occupa quindi del corpo dell'articolo, del titolo, di mostrare tag e categorie e quant'altro si può facilmente riutilizzare usando un partial.

Per capire come usare i partial, prendiamo la vista dell'azione show, (che trovate ancora in views/home/show.rhtml) ed estraiamo il codice relativo alla visualizzazione dei messaggi:

<div>
<h4><%= message.author.name %> ha detto</h4>
<p>
    <%= message.body %>
</p>
</div>

salviamo questo codice in un file chiamato _message.rhtml nella stessa cartella, ed abbiamo concluso. Ma come facciamo ad usarlo?

La cosa è molto semplice, è sufficiente modificare il corpo del ciclo for in questo modo

<% for m in @topic.messages %>
    <%= render(:partial => "message", :object=>m) %>
<% end %>

che va letto come "restituisci la stringa che viene fuori prendendo il partial chiamato message e mettendoci dentro questo oggetto".  Il modo in cui  la vista riesce a trovare il partial è ovvio, semplicemente aggiunge un underscore ("_") davanti al nome, meno ovvio è il modo in cui viene passata la variabile: in sostanza, il contenuto della variabile passata a render  viene infilato dentro una variabile che ha lo stesso nome del partial. Quindi poiché il nostro si chiama "message" sarà la variabile "message" ad essere inizializzata con i valori necessari.  

Nel nostro caso, ed in generale vale quasi sempre, la scelta del nome del partial è stata dettata proprio dal fatto che esso usava una variabile con tale nome, e che questo nome spiega abbastanza bene ciò che fa (mostra un messaggio). Ovviamente, nel caso in cui aveste usato una variabile con un nome senza nessuna ombra significato, come "i" o "mg" sarebbe consigliabile intervenire su questo codice e cambiarlo leggermente, cosa che in effetti sarebbe consigliabile comunque per renderlo più chiaro.

Una nota aggiuntiva sui partial ripetuti. Come si può intuire, è molto comune che un partial sia usato in congiunzione con una collezione di oggetti: pensiamo ad esempio a mostrare dei prodotti, o una lista di utenti, o di commenti o altro. Dovremmo ogni volta scrivere un ciclo for come quello qui sopra, il che sarebbe uno spreco di codice ed una fatica inutile, quindi Rails offre un meccanismo per automatizzare il tutto, usando di nuovo render

Possiamo cancellare tutte e tre le righe del ciclo e sostituirle con una sola:

<%= render(:partial => "message", :collection=>@topic.messages ) %>

Questo modo di usare il metodo farà si che il partial venga usato con ogni elemento della collezione automaticamente, esattamente come se avessimo scritto un ciclo sugli elementi della collezione a mano. 

Il metodo render ha numerose altre applicazioni, ad esempio è possibile utilizzare render :text=>"testo" all'interno del metodo relativo ad un'azione per saltare completamente l'analisi di un file rhtml, il che può essere utile per creare dei web service RESTful. Per scoprire le varie opzioni di render però è consigliabile vedere le api di Rails, in quanto ne ha una dozzina con varie sotto opzioni, permettendo di specificare se si desidera renderizzare un template o un'azione e quale codice HTTP si vuole restituire e molto altro.

Ti consigliamo anche