I controller, gestendo completamente la componente web dell’applicazione, necessita di accedere ad alcune informazioni strettament.e collegate a questo livello applicativo. Rails permette di accedere a queste informazioni tramite i cosidetti oggetti impliciti: oggetti che esistono all’interno di ciascun controller e che non necessitano di nessuna istanziazione.
Gli oggetti impliciti forniti dal framework sono:
request
Rappresenta la richiesta effettuata dal client. I principali attributi dell’oggetto sono:- domain – ritorna il dominio della richiesta
- remote_ip – ritorna l’ip della macchina che ha effettuato la richiesta
- env – ritorna l’oggetto environment, utile per accedere ad alcune informazioni settata dal browser richiedente
- method – ritorna il metodo utilizzato per effettuare la richiesta sotto forma di simbolo (può essere :get, :post, :delete, :put, :head) Oltre a questi attributi l’oggetto request presenta alcuni metodi di utilità per effettuare controlli sul metodo utilizzato che ritornano un boolean comodo per effettaure delle verifiche. I metodi sono: delete?, get?, head?, post?, put?.
params
Un hash (vettore ad indice associativo) che contiene i parametri inviati insieme alla richiesta. Non fa distinzione riguardo al metodo utilizzato.
cookies
Hash rappresentate i cookie inviati dal browser insieme alla richiesta. Eventuali modifiche all’array associativo verranno inviate insieme alla risposta.
response
Oggetto rappresentante la risposta del server. Questo oggetto viene completamente gestito da Rails e normalmente non viene in nessuno modo utilizzato.
session
Hash rappresentante la sessione dell’utente corrente.
headers
Hash rappresentate gli headers (intestazioni) della risposta del server.
Questi oggetti sono accessibili semplicemente accedendo tramite il loro nome. Ecco alcuni esempi
# effettuo due azioni diverse in base al metodo utilizzato def check_method if request.post? # salvo l'oggetto su db else # mostro il form end end
# pseudo azione incaricata di autenticare l'utente corrente def login if User.find_by_username_and_password(params[:username], params[:password]) if params[:remember_me] cookie[:logged] = true end session[:logged] = true end end