Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ruby On Rails Insert

1,729 views

Published on

Come inserire i dati in una tabella che ha chiavi straniere

Published in: Education, Technology, Business
  • Be the first to comment

Ruby On Rails Insert

  1. 1. Ruby on Rails, insert su di un tabella voti Lezione del Prof. Silvano Natalizi, marzo 2009
  2. 2. Testo del problema <ul><li>Si vuole fare il programma che permette di inserire i voti nella tabella voti. </li></ul><ul><li>tracciato record della tabella: </li></ul><ul><li>Id (integer,chiave primaria) </li></ul><ul><li>datavoto (datetime) </li></ul><ul><li>studente_id (foreign key) </li></ul><ul><li>materia_id (foreign key) </li></ul><ul><li>prof_id (foreign key) </li></ul><ul><li>tipovoto (string) </li></ul><ul><li>voto (decimal) </li></ul><ul><li>desc (text) </li></ul>
  3. 3. Creazione della applicazione voti <ul><li>rails voti </li></ul><ul><li>cd voti </li></ul>
  4. 4. Creazione scaffold delle tabelle senza chiavi straniere <ul><li>ruby script/generate scaffold studente nome:string </li></ul><ul><li>ruby script/generate scaffold insegnante nome:string </li></ul><ul><li>ruby script/generate scaffold materia string:nome </li></ul><ul><li>rake db:migrate </li></ul><ul><li>Con il comando rake ha creato le tre tabelle con i nomi rispettivamente studentes, insegnantes, materias (il plurale in inglese) </li></ul>
  5. 5. Inserimento di alcuni dati di prova nelle tabelle create <ul><li>Lanciare il web server con il comando ruby script/server </li></ul><ul><li>Navigare su localhost:3000/materias </li></ul><ul><li>Inserire alcuni dati nella tabella materia </li></ul><ul><li>Navigare su localhost:3000/studentes </li></ul><ul><li>Inserire alcuni dati nella tabella studente </li></ul><ul><li>Navigare su localhost:3000/insegnantes </li></ul><ul><li>Inserire alcuni dati nella tabella insegnante </li></ul><ul><li>Tutto questo lo si fa con le view che sono state automaticamente generate dallo scaffold </li></ul>
  6. 6. Ora bisogna creare la tabella con le chiavi straniere <ul><li>Conviene fare il lavoro a mano </li></ul><ul><li>Anzitutto creiamo il modello </li></ul><ul><li>con il comando ruby script/generate model voto datavoto:datetime </li></ul><ul><li>studente_id:integer </li></ul><ul><li>materia_id:integer </li></ul><ul><li>prof_id:integer </li></ul><ul><li>tipovoto:string </li></ul><ul><li>voto:decimal </li></ul><ul><li>desc:text </li></ul><ul><li>quindi eseguire il comando: rake db:migrate </li></ul>
  7. 7. La tabella votos <ul><li>La tabella votos è starta creata con i campi desiderati, ma ancora è vuota </li></ul><ul><li>Possiamo esaminare le tabelle create, perché il database si chiama development.sqlite3 ed è interno alla cartella db </li></ul><ul><li>Lo possiamo aprire con il comando: </li></ul><ul><li>sqlite3 development.sqlite3 </li></ul><ul><li>Poi possiamo vedere quali tabelle sono presenti con .tables </li></ul><ul><li>Infine possiamo vedere la sua struttura record con il comando .schema votos </li></ul>
  8. 8. Ora creiamo il controllore per gestire l’inserimento dei dati in votos <ul><li>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 </li></ul><ul><li>Chiaramente non è presente votos_controller </li></ul><ul><li>Ora creiamo votos_controller con il comando: </li></ul><ul><li>ruby script/generate controller votos </li></ul>
  9. 9. Apriamo votos_controller.rb con un editor
  10. 10. Scriviamo il codice che ci serve dentro la classe VotosController <ul><li>Inseriamo anzitutto un metodo per leggere tutti gli studenti, tutte gli insegnanti, tutte le materie dalle rispettive tabelle del database </li></ul><ul><li>@materie=Insegnante.find(:all) </li></ul><ul><li>@studenti=Studente.find(:all) </li></ul><ul><li>@insegnanti=Insegnante.find(:all) </li></ul><ul><li>Osserva che le parole con la iniziale maiuscola sono i nomi delle classi dei modelli </li></ul><ul><li>Ogni modello corrisponde ad una tabella relazionale </li></ul>
  11. 11. il metodo inserisciVoti
  12. 12. Creazione della view inseriscivoti.html.erb
  13. 13. Prova questo metodo inseriscivoti <ul><li>Riavvia il web server con ruby script/server </li></ul><ul><li>Quindi naviga su localhost:3000/votos/inseriscivoti </li></ul><ul><li>Vediamo tre menù a tendina </li></ul>
  14. 14. Mettiamo tutti i dati del voto in una form <ul><li>I menù a tendina della materia, dell’insegnante, dello studente ci servono per gestire le chiavi straniere </li></ul><ul><li>Per tutti gli altri dati che non sono chiavi straniere, inseriamo delle caselle di testo </li></ul><ul><li>In fondo mettiamo un bottone di invio dati </li></ul>
  15. 15. Come è fatta la form inseriscivoti
  16. 16. Come è fatto il metodo create
  17. 17. La visualizzazione della form
  18. 18. Che cosa otteniamo con dei dati di prova <ul><li>Come si vede, ci sono 2 errori: il campo del tipo voto è vuoto, inoltre il voto è zero! Perché ? </li></ul>
  19. 19. Il seguito alla prossima puntata <ul><li>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! </li></ul><ul><li>Per quanto riguarda il tipovoto, l’errore è strano, bisogna studiarci un pò,. </li></ul><ul><li>A domani </li></ul>
  20. 20. Ho avuto un ripensamento <ul><li>Ho corretto il primo errore dovuto al fatto che mancava l’istruzione che settava il valore di “tipovoto”. Ok </li></ul><ul><li>Per quanto riguarda il voto, la mia previsione era giusta, occorreva convertirlo in float con @voto.to_f </li></ul><ul><li>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 </li></ul><ul><li>Infine tutto ok! Come si può vedere dalla schermata successiva. </li></ul>
  21. 21. Prova finale

×