Validating Your Data

22
Validating your data Lezione Ruby On Rails Silvano Natalizi Maggio 2009

description

controlli formali dell'inserimento dati. Validazione dei dati

Transcript of Validating Your Data

Page 1: Validating Your Data

Validating your data

Lezione Ruby On Rails

Silvano Natalizi

Maggio 2009

Page 2: Validating Your Data

Prevenire gli errori

Page 3: Validating Your Data

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

Page 4: Validating Your Data

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

Page 5: Validating Your Data

Dove deve essere posto il codice di validazione dati ?

Nel controllore ?Nella form ?Nel modello ?

Page 6: Validating Your Data

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.

Page 7: Validating Your Data

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

Page 8: Validating Your Data

Validatore numerico

Per verificare che il valore immesso sia numerico, possiamo usare il validatore validates_numericality_of :

Page 9: Validating Your Data

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.

Page 10: Validating Your Data

Come validiamo i campi obbligatori ?

Il validatore che possiamo usare per verificare la presenza di valori nei campi obbligatori è:

validates_presence_of :field_name

Page 11: Validating Your Data

Altri validatori

Page 12: Validating Your Data

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 ?

Page 13: Validating Your Data

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 !

Page 14: Validating Your Data

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.

Page 15: Validating Your Data

Il codice da scrivere nel controllore

Page 16: Validating Your Data

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!

Page 17: Validating Your Data

Gli errori vanno visualizzati nella form

Page 18: Validating Your Data

test

Page 19: Validating Your Data

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.

Page 20: Validating Your Data

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

Page 21: Validating Your Data

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.

Page 22: Validating Your Data

Continua…