- Learn
- Guida Ruby On Rails 2
- Introduzione a controller e viste
Introduzione a controller e viste
- di Luca Bozzo
Il controller, nell’architettura MVC, riveste la funzione di coordinatore delle differenti componenti dell’applicazione: da una parte dialoga con i modelli per estrarre e manipolare i dati conservati nel database, dall’altra dialoga con le viste per interagire con l’utente.
In Rails i controller risiedono nella cartella app/controllers
, all’interno di file dal nome <nome_significativo>_controller.rb
ed estendono la classe ApplicationController
; all’interno di ogni controller sono presenti diverse action, definite come metodi della classe controller
.
Apriamo il file app/controllers/bookmarks_controller.rb
per analizzare nel dettaglio il controller per la gestione dei bookmark, ed in particolare soffermiamoci sulla action show
:
class BookmarksController < ApplicationController ... # GET /bookmarks/1 # GET /bookmarks/1.xml def show @bookmark = Bookmark.find(params[:id]) respond_to do |format| format.html # show.html.erb format.xml { render :xml => @bookmark } end end ... end
Il nome della classe che definisce il controller rispecchia il nome del file in cui la classe è contenuta (BookmarksController
per il file bookmarks_controller.rb
) e le action sono definite come metodi della classe in minuscolo.
Fin dalla prima istruzione si può osservare il controller dialogare con i modelli, in questo caso per l’estrazione di un particolare bookmark. Il metodo find
, già descritto nelle precedenti lezioni, estrae il bookmark avente come id
il valore di params[:id]
.
Il bookmark estratto dal metodo find
viene conservato nella variabile @bookmark
; quando una variabile ha il nome preceduto dal simbolo @
, come in questo caso, la variabile e il suo valore sono disponibili non solo all’interno del controller ma anche alle viste richiamate durante l’esecuzione del controller.
Per mezzo di queste variabili il controller può rendere disponibili i dati estratti dal modello alla vista, come nel nostro esempio sta capitando per il bookmark estratto con il metodo find
e conservato nella variabile @bookmark
.
Dopo aver eseguito la logica della action, in questo caso l’estrazione dal database, si deve rendere disponibile il risultato della action all’utente per mezzo delle viste.
Il controller prevede che il risultato possa essere proposto sia come pagina HTML, sia come file XML; per decidere quale formato scegliere il controller verifica l’estensione con la quale è stata formulata la richiesta e decide di conseguenza quale risposta dare.
Il blocco di codice
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @bookmark }
end
indica che, se la richiesta è pervenuta con estensione .html
viene generata vista legata alla action (la pagina HTML), se l’estensione è .xml
viene generato un documento XML che rappresenta i dati contenuti in @bookmark
.
Se l’estensione è omessa, Rails si comporterà come se l’estensione fosse .html
. Per toccare con mano questa funzionalità avviamo il server da terminale e osserviamo cosa succede per le diverse richieste.
Indirizzo | Estensione | Risposta |
---|---|---|
http://0.0.0.0:3000/bookmarks/1.html |
.html |
pagina Web (HTML) |
http://0.0.0.0:3000/bookmarks/1.xml |
.xml |
documento XML |
http://0.0.0.0:3000/bookmarks/1 |
assente |
pagina Web (HTML) |
Nel codice della action show
non è indicato esplicitamente quale vista utilizzare per la generazione della pagina HTML; il collegamento fra controller e viste avviene per mezzo di convenzioni:
- per ogni controller nella cartella
app/controllers
c’è presente una cartella corrispondente nella cartellaapp/views
che contiene le viste relative a quel controller - il nome della cartella dedicata alle viste ha lo stesso nome del controller
(es. per il controllerBookmarksController
c’è la cartellaapp/views/bookmarks
- la cartella in
app/views
contiene un file per ogni action del controller - i nomi dei file delle viste associate alle action rispettano il formato
<nome_action>.<formato>.<sistema di template utilizzato>
(es. il file che genera la pagina HTML per la action
index
del controllerBookmarksController
saràapp/views/bookmarks/index.html.erb
)
Seguendo queste convenzioni il risultato della action può essere presentato all’utente tramite una pagina HTML; i dati preparati dal controller sono resi disponibili alla vista per mezzo di variabili condivise.
Il compito della vista però non si esaurisce nella presentazione di un risultato all’utente; la vista ha anche il compito di raccogliere dati dall’utente e di comunicarli alla action, così come capita ad esempio quando si crea un nuovo bookmark. Nella prossima lezione analizzeremo questa situazione ponendo particolare attenzione a come i parametri vengono passati dalla vista al controller.
Se vuoi aggiornamenti su Introduzione a controller e viste inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Entity Framework 6.0 in real solutions
In questa sessione di Paolo Pialorsi saranno valutate le caratteristiche e le novità di Entity Framework 6.0 dimostrandone casi d’uso […]