validating your data

Post on 13-Jun-2015

597 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

controlli formali dell'inserimento dati. Validazione dei dati

TRANSCRIPT

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…

top related