View
602
Download
1
Tags:
Embed Size (px)
DESCRIPTION
controlli formali dell'inserimento dati. Validazione dei dati
Citation preview
Validating your data
Lezione Ruby On Rails
Silvano Natalizi
Maggio 2009
Prevenire gli errori
Che cosa succede se viene digitata una stringa al posto di un numero ?
Se in una casella di testo paid_amount, un utente digita $50 anziché 50
Il controllore riceve il valore $50 e lo passa al modelloIl modello riceve il valore $50, ma c’è un problema. Il
valore contiene il simbolo $, e il modello non può convertirlo in un numero. Pertanto nel database viene salvato il numero 0.0
Causa del problema
Il problema è causato dall’utente che inserisce un dato errato nella form della pagina web
Il programmatore deve impedire che ciò accadaPer prevenire l’inserimento di dati errati, il
programmatore può scrivere del codice opportunoQuesto codice deve validare i dati della form prima
che questi siano scritti nel database
Dove deve essere posto il codice di validazione dati ?
Nel controllore ?Nella form ?Nel modello ?
Il codice di validazione dati deve essere scritto nel modello
Se mettessimo il codice di validazione dei dati nella view o nel controllore, dovremmo duplicare il codice per l’azione “new” e “edit”
Se invece la validazione è centralizzata nel modello, non importa quale azione si faccia.
validators
Ogni sistema usa un qualche tipo di check per controllare l’immissione dei dati Rails usa un insieme di istruzioni chiamate validatori Il validatore è un oggetto Ruby. Il validatore fa il check in dei dati prima che qualcuno provi a salvarli o ad aggiornare il
database Essi ci permettono di filtrare i dati e di determinare quali non sono permessi
Validatore numerico
Per verificare che il valore immesso sia numerico, possiamo usare il validatore validates_numericality_of :
Come funziona il validatore ?
Ogni qual volta il controllore esegue l’istruzione @client_workout.save oppure @client_workout.update_attributes, il modello esegue il validatore validates_numericality_of.
Se, in paid_amount, è stato digitato un dato non numerico il validatore genera un errore. Rails emette il messaggio di errore e non aggiorna il database.
Come validiamo i campi obbligatori ?
Il validatore che possiamo usare per verificare la presenza di valori nei campi obbligatori è:
validates_presence_of :field_name
Altri validatori
Mostrare la pagina dove si verifica l’errore
Quando viene rilevato un errore di validazione dati, occorre visualizzare nuovamente la pagina nella quale si
è verificato l’errore di validazione dati
La form deve visualizzare tutti gli errori generati dai validatori
Pertanto quale è la prima cosa che deve fare un’applicazione ?
Il controllore deve sapere se c’è stato un errore
Se l’utente immette in una form dei dati errati, l’applicazione deve inviare all’utente nuovamente la medesima form con l’indicazione dei dati errati.
Il controllore ha il compito di smistare i dati letti e scritti Il codice del controllore, ad esempio nella creazione di
un nuovo record, fa sempre la stessa cosa: cerca di salvarlo nel database, e poi va ad una pagina che mostri i dati.
Non fa nulla se il salvataggio dei dati non avvieneIl problema è come dire al controllore quando è fallito il
salvataggio dei dati !
Return value
In Ruby, ogni comando restituisce un valore. Se fallisce il comando @ad.save, esso restituisce false.
Pertanto il controllore può sapere se il salvataggio è andato a buon fine oppure no, testando questo valore restituito.
Il codice da scrivere nel controllore
To display error messages
L’applicazione deve visualizzare di nuovo la form, e deve anche mostrare quali sono gli errori !
L’utente deve sapere che cosa ha sbagliato.Quando il validatore rileva un errore, immagazzina
un messaggio di errore nel modello.Ma vogliamo visualizzare questi messaggi di
errore nella view!
Gli errori vanno visualizzati nella form
test
Il comando render
render :action=>”show”
Quando si manda in esecuzione il metodo render con il parametro :action=>”show”, non si esegue il metodo show, ma invece si visualizza la pagina show.html.erb.
Se a questa pagina occorrono delle variabili di input, queste devono essere settate opportunamente dentro il metodo che richiama render.
Che cosa è un template ?
Il template è un file che definisce il contenuto di una risposta della applicazione
Ad esempio una view: show.html.erbQuindi il template spesso è una view, con
l’informazione fornita dal controllore, usata per generate la risposta al browser
Redirect_to
Il comando redirect_to :action=>’show’, al contrario di render, fa rieseguire tutta l’azione ‘show’ a partire dal metodo show del controllore.
Continua…