Download ppt - Ruby On Rails Insert

Transcript
Page 1: Ruby On Rails Insert

Ruby on Rails, insert su di un tabella voti

Lezione del Prof. Silvano Natalizi, marzo 2009

Page 2: Ruby On Rails Insert

Testo del problema Si vuole fare il programma che permette di

inserire i voti nella tabella voti. tracciato record della tabella: Id (integer,chiave primaria) datavoto (datetime) studente_id (foreign key) materia_id (foreign key) prof_id (foreign key) tipovoto (string) voto (decimal) desc (text)

Page 3: Ruby On Rails Insert

Creazione della applicazione voti rails voti cd voti

Page 4: Ruby On Rails Insert

Creazione scaffold delle tabelle senza chiavi straniere ruby script/generate scaffold studente

nome:string ruby script/generate scaffold insegnante

nome:string ruby script/generate scaffold materia

string:nome rake db:migrate Con il comando rake ha creato le tre tabelle

con i nomi rispettivamente studentes, insegnantes, materias (il plurale in inglese)

Page 5: Ruby On Rails Insert

Inserimento di alcuni dati di prova nelle tabelle create Lanciare il web server con il comando ruby

script/server

Navigare su localhost:3000/materias Inserire alcuni dati nella tabella materia

Navigare su localhost:3000/studentes Inserire alcuni dati nella tabella studente

Navigare su localhost:3000/insegnantes Inserire alcuni dati nella tabella insegnante

Tutto questo lo si fa con le view che sono state automaticamente generate dallo scaffold

Page 6: Ruby On Rails Insert

Ora bisogna creare la tabella con le chiavi straniere Conviene fare il lavoro a mano Anzitutto creiamo il modello con il comando ruby script/generate model

voto datavoto:datetime studente_id:integer materia_id:integer prof_id:integer tipovoto:string voto:decimal desc:text quindi eseguire il comando: rake

db:migrate

Page 7: Ruby On Rails Insert

La tabella votos La tabella votos è starta creata con i campi

desiderati, ma ancora è vuota Possiamo esaminare le tabelle create, perché

il database si chiama development.sqlite3 ed è interno alla cartella db

Lo possiamo aprire con il comando: sqlite3 development.sqlite3 Poi possiamo vedere quali tabelle sono

presenti con .tables Infine possiamo vedere la sua struttura record

con il comando .schema votos

Page 8: Ruby On Rails Insert

Ora creiamo il controllore per gestire l’inserimento dei dati in votos Se guardiamo nella cartella app/controllers

vediamo la presenza dei controllori insegnantes_controller.rb, materias_controller.rb, studentes_controller.rb, che sono stati creati dallo scaffold in maniera automatica

Chiaramente non è presente votos_controller Ora creiamo votos_controller con il comando: ruby script/generate controller votos

Page 9: Ruby On Rails Insert

Apriamo votos_controller.rb con un editor

Page 10: Ruby On Rails Insert

Scriviamo il codice che ci serve dentro la classe VotosController Inseriamo anzitutto un metodo per leggere

tutti gli studenti, tutte gli insegnanti, tutte le materie dalle rispettive tabelle del database

@materie=Insegnante.find(:all) @studenti=Studente.find(:all) @insegnanti=Insegnante.find(:all)

Osserva che le parole con la iniziale maiuscola sono i nomi delle classi dei modelli

Ogni modello corrisponde ad una tabella relazionale

Page 11: Ruby On Rails Insert

il metodo inserisciVoti

Page 12: Ruby On Rails Insert

Creazione della view inseriscivoti.html.erb

Page 13: Ruby On Rails Insert

Prova questo metodo inseriscivoti Riavvia il web server con ruby script/server Quindi naviga su

localhost:3000/votos/inseriscivoti Vediamo tre menù a tendina

Page 14: Ruby On Rails Insert

Mettiamo tutti i dati del voto in una form I menù a tendina della materia,

dell’insegnante, dello studente ci servono per gestire le chiavi straniere

Per tutti gli altri dati che non sono chiavi straniere, inseriamo delle caselle di testo

In fondo mettiamo un bottone di invio dati

Page 15: Ruby On Rails Insert

Come è fatta la form inseriscivoti

Page 16: Ruby On Rails Insert

Come è fatto il metodo create

Page 17: Ruby On Rails Insert

La visualizzazione della form

Page 18: Ruby On Rails Insert

Che cosa otteniamo con dei dati di prova Come si vede, ci sono 2 errori: il campo del tipo

voto è vuoto, inoltre il voto è zero! Perché ?

Page 19: Ruby On Rails Insert

Il seguito alla prossima puntata Bisogna cercare l’errore. Per quanto riguarda

il voto c’era da aspettarsi che qualcosa andasse male, perché il campo è di tipo testo, ed invece il voto è float. Pertanto bisogna trovare l’istruzione che permette di convertire una string in un decimale!

Per quanto riguarda il tipovoto, l’errore è strano, bisogna studiarci un pò,.

A domani

Page 20: Ruby On Rails Insert

Ho avuto un ripensamento Ho corretto il primo errore dovuto al fatto che

mancava l’istruzione che settava il valore di “tipovoto”. Ok

Per quanto riguarda il voto, la mia previsione era giusta, occorreva convertirlo in float con @voto.to_f

Ma non bastava. Occorreva modificare il nome di @voto in @voto1, altrimenti gli dava fastidio il fatto di avere lo stesso nome dell’oggetto @voto

Infine tutto ok! Come si può vedere dalla schermata successiva.

Page 21: Ruby On Rails Insert

Prova finale