5.1 - Capire il routing

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


Come tutte le web application di questo mondo, una volta avviato il server, esso si mette in ascolto su una determinata porta, aspettando eventuali richieste. Una volta ricevuta una richiesta il framework Rails istanzierà un determinato controller (una sottoclasse di ActionController::Base) e invocherà un determinato metodo chiamato per l’occasione action (azione per gli xenofobi). Questo metodo sarà incaricato di eseguire funzionalità specifiche prima di mostrare una determinata porzione di codice html (la vista/view) all’utente che ha inoltrato la richiesta.

Riporto per comodità il comodo schemino presentato qualche capitolo fa:

Ora la domanda sorge spontanea: come fa a capire Rails quale controller istanziare e quale azione invocare??

Rails percepisce queste informazioni tramite un processo chiamato routing (instradamento) che permette di “formattare” in modo particolare l’url che compone la richiesta. Guardiamo subito un esempio:

Una richiesta a questo indirizzo:
http://dominio/team/list
verrà “tradotto” dal routing in qualcosa di simile: istanzia il controller Team e invoca la sua azione list.

Niente di più semplice no?

Ovviamente esistono situazioni in cui una così alta semplicità non basta: proviamo a pensare alla pagina che mostra il dettaglio di una squadra. Non sarà sufficente fare una richesta a http://dominio/team/details in quanto abbiamo bisogno di un terzo parametro (oltre a controller ed action) ovvero un identificatore della squadra corrente. Basterà quindi richiedere il seguente url:

http://dominio/team/details/12

Questo significherà: instanzia il controller Team e invoca la sua azione list passandogli come parametro id il valore 12. A questo punto sarà il controller che, in base al parametro ricevuto, recupererà le informazioni necessarie da mostrare all’utente.

Questi due pattern di url sono quelli “convenzionati” con Rails, ma ovviamente possiamo crearne di nuovi in base alle nostre esigenze tramite una modifica al file config/routes.rb (che analizzeremo del dettaglio successivamente).

Per adesso accontentiamoci diaver capito i pattern forniti di default con Rails che potremmo scrivere in questo maniera più generale:

:controller/:action 
# per esempio http://dominio/team/list
:controller/:action/:id
# per esempio http://dominio/team/details/12

Guida RoR

5.2 – Creiamo il nostro primo controller

Updated on July 16, 2007 17:04 by Alberto Bottarini (79.1.138.115)