Le viste sono la visualizzazione HTML di quanto viene prodotto dal controller. Tipicamente esiste una vista per ogni azione (metodo) del controller. L’HTML completo fornito al client sarà la composizione del file ERB associato all’azione del controller, del layout che lo contiene e di tutti i partial che questo referenzia.
1. Template, Partial e Layouts
1.1 Templates
Associati all’azione del controller, possono essere file .erb o .haml e contengono codice ruby che utilizza le variabili fornite dal controller.
Esempio con codice erb
Stesso codice con haml
1.2 Partials
Servono per suddividere il rendering in sottoparti richiamabili. Non sono associati a nessun controller e possono essere richiamati da più template con il comando render
.
Se sono all’interno della stessa cartella di view posso scivere:
che eseguità il rendere di un file chiamato _menu.html.erb
.
Notare che i partial devono cominciare con un _ per distinguerli dai template.
Se voglio utilizzare un partial da una altra cartella posso scrivere
1.2.1 Passare variabili al partial
Quando eseguo il rendering di un partial, a questo viene passata, se esiste, una variabile con lo stesso nome del partial. I seguenti due codici sono quindi equivalenti:
1.2.2 Iterare su collection di elementi
Spesso ho un partial per un singolo elemento e voglio eseguirne il rendering per una serie di elementi. Il seguente codice:
Posso tradurlo i una singola linea di codice:
Che posso ulteriormente ridurre con:
Nel caso in cui necessiti di avere un partial (divider, spacer) da inserire ad ogni rendering di partial di una collection, posso utilizzare l’attributo spacer_partial
nel seguente modo:
Verrà quindi eseguito il render del _product_ruler
partial tra ogni partial _product
1.3 Layouts
I layout possono essere utilizzati per renderizzare un template comune attorno ai risultati dei controller. Di solito un sito presenta una serie di layout di base, come quello per l’utente sloggato o loggato o altri utilizzi.
2. Helper
2.1 RecordTagHelper
Questo modulo fornisce un modo comodo per generare i tag a partire dagli oggetti forniti dal backend, con degli id e delle classi coerenti.
2.1.1 content_tag_for
Crea un tag in relazione all’oggetto ActiveRecord
.
Per esempio, dato un @article
della classe Article posso fare:
Che genera
Posso anche passare una collection di oggetti ActiveRecord:
Genera
2.1.2 div_for
Analogo a content_tag_for
ma crea un tag div
.
2.1.3 image_path
Fornisce il path dell’immagine negli asset
2.1.4 image_url
Fornisce l’url completo da un’immagine negli asset
2.1.5 image_tag
Fornisce il tag html per una immagine negli asset
2.1.6 content_for
content_for
memorizza un blocco di markup in una variabile in modo che possa essere utilizzato successivamente. Viene chiamato mediante il metodo yield
.
Per esempio, assumiamo che abbiamo un layout standard, ma inoltre una pagina che richiede un Javascript che le altre pagine non necessitano. Possiamo utilizzare content_for
per includere questo Javascript nella nostra pagina speciale senza modificare il resto del sito.
Che può essere richiamato nel seguente modo
2.1.7 link_to
Crea un link per una determinata route. Esempio:
2.2 DateHelper
Vedi documentazione http://guides.rubyonrails.org/action_view_overview.html
2.3 DebugHelper
Fornisce un tag pre compilato con l’oggetto da controllare
Fornisce
2.4 FormHelper
2.4.1 form_for
Crea un form a partire da una istanza del model. Per esempio, assumiamo di avere un model Person e ne vogliamo creare una nuova istanza:
Creerà il seguente html:
a al controller arriverà l’oggetto seguente:
2.4.2 check_box
Fornisce una checkbox per accedere ad un atrributo booleano, eventualmente preselezionata in base al valore che tale oggetto ha nel model
2.4.3 fields_for
analogo al form_for ma senza creare il tag form effettivo. Serve per specificare oggetti addizionali all’interno di un form
2.4.4 file_field
Fornisce un tag pe l’upload di file
2.4.5 hidden_field
Fornisce un tag input hidden
2.4.6 label
fornisce un tag label
label(:article, :title)
2.4.7 password_field
2.4.8 radio_button
2.4.9 text_area
2.4.10 text_field
2.4.11 email_field
2.4.12 url_field
2.5 FormOptionsHelper
Fornisce metodi per trasformare differenti tipi di container in insieme di tag option.
2.5.1 collection_select
Ho un oggetto che ha una relazione di belongs_to
ad un altro. Voglio creare un tag select con dei tag option per permettere di associarci l’oggetto padre.
Per esempio, assumiamo di avere l aseguente struttura
Assumimo di avere una istanza di Article
(@article
) e vogliamo associargli un autore.
Il seguente codice:
genera il seguente HTML (assumendo che @article.author_id
sia uguale a 1). Ovviamente questo deve essere inserito in un form affinchè il giro funzioni.
2.5.2 collection_radio_buttons
Analogo al metodo sopra ma creando dei radio button invece dei select-option
Fornisce
2.5.3 collection_check_boxes
Analogo a sopra ma con degli input type checkbox
2.5.4 option_groups_from_collection_for_select
Raggruppa gli oggetti in degli optgroup. Vedi documentazione se necessario
2.5.5 options_for_select
Accetta un container (hash, array, enum…) e fornisce una lista di tag option
2.5.6 options_from_collection_for_select
Fornisce una lista di option a partire da una istanza di un oggetto ActiveRecord in cui l’attributo del tag è text_method
e il valore è value_method
2.5.7 select
Crea un tag select e una serie di tag option in esso contenuti per l’oggetto fornito
Se @article.person_id = 1
il risultato sarà: