Your SlideShare is downloading. ×
Esercitazioneguidata Collegamento Uno Molti
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Esercitazioneguidata Collegamento Uno Molti

827
views

Published on

Come creare una view con dati di due tabelle relazionali collegate con una relazione uno a molti

Come creare una view con dati di due tabelle relazionali collegate con una relazione uno a molti

Published in: Education

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
827
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Esercitazione guidata: 4) collegamento tra due tabelle con relazione uno a molti Prof. Silvano Natalizi VA Liceo Tecnico – maggio 2009
  • 2. Collegamento tra 2 tabelle con relazione uno a molti
    • Partiamo da una soluzione ad un problema concreto
    • Si vuole dare la possibilità online di prenotarsi per un viaggio
    • Esiste una lista con il programma dei viaggi previsti
    • Gli utenti possono prenotare il viaggio fino al raggiungimento del numero massimo che generalmente è la capienza del volo aereo
  • 3. Schema concettuale
  • 4. Vogliamo ottenere una pagina web di questo tipo
  • 5. Crea l’applicazione viaggi
    • rails viaggi
    • cd viaggi
  • 6. Genera la tabella viaggi
    • Genera tutto il codice della tabella viaggi automaticamente
      • ruby script/generate scaffold viaggi nome:string desc:text datapartenza:datetime durata:integer capogruppo:string cellulare:string prezzo:integer
      • rake db:migrate
  • 7. Genera la tabella prenotati
    • Genera tutto il codice di prenotati
    • La tabella prenotati è collegata con una relaziona uno a molti con viaggi; pertanto deve avere la chiame primaria id di viaggi come chiave straniera viaggi_id
    • ruby script/generate scaffold prenotati nome:string cellulare:string localita:string email:string sesso:string eta:integer viaggi_id:integer
    • rake db:migrate
  • 8. Inserire alcuni dati di prova
    • Inserire alcuni dati di prova nella tabella viaggis
      • ruby script/server
      • localhost:3000/viaggis
      • new
      • inserire un viaggio
      • create
  • 9. Creiamo la form parziale per la prenotazione
    • copia appviewsprenotatis ew.html.erb in appviewsviaggisnew_prenotazione.html.erb
  • 10. Questa à la form di input
    • elimina la riga 39 del link
  • 11. Inserisci la form parziale new_prenotato.html.erb nella view show.html.erb
    • apri la view appviewsviaggishow.html.erb
    • inserisci la riga 36 come in figura
    • Questa form parziale deve apparire nella pagina del viaggio
  • 12. Modifica la form _new_prenotato.html.erb
    • togli la @ in @prenotati così da trasformare la variabile globale in variabile locale
    • La variabile @prenotati gli veniva passata dal metodo new del controllore prenotatis
    • ora questa form non è più linkata a questo controllore, ma al controllore viaggis
    • Pertanto la variabile @prenotati non è più inizializzata
    • Questa è la ragione per la quale dobbiamo trasformarla in variabile locale
  • 13. Come passiamo delle variabili locali ad un parziale
    • Apri la view show.html.erb della cartella views/viaggis
    • Modifica la riga 36 in questo modo
    • <%= render :partial=>”new_prenotato”, :locals=>{:prenotati=>Prenotati.new} %>
  • 14. Prova il programma: localhost:3000/viaggis
  • 15. Scegli un viaggio, devi ottenere questa form
  • 16. Elimina il campo viaggi chiave straniera dalla form
    • Osserva che c’è il campo viaggi che serve per digitare la chiave straniera.
    • Tuttavia questo dato, che collega la tabella viaggi con quella delle prenotazioni, non deve e non può essere dato in gestione all’utente.
    • E’ il programma responsabile della sua amministrazione
    • Di conseguenza il campo chiave straniera va tolto dalla form parziale
    • Elimina le righe dalla 30 alla 33 della form parziale _new_prenotato.html.erb fino ad ottenere l’allegata form
  • 17. Bisogna comunque passare la chiave straniera viaggi_id
    • Alla riga 36 di show.html.erb aggiungi come parametro (:viaggi_id=>@viaggi.id)
    • Devi ottenere il codice della riga 36 mostrato in allegato
  • 18. Ricarica la pagina, e vedi che non c’è più il campo viaggi
  • 19. Prima di pigiare il bottone create per memorizzare i dati
    • Devi comunque salvare la chiave straniera nella form usando un campo nascosto
    • Aggiungi questa riga 5
    • <%= f.hidden_field :viaggi_id, :value=>@viaggi.id %>
    • nel parziale _new_prenotato.html.erb
  • 20. Aggiungiamo un altro parziale per mostrare la lista dei viaggiatori prenotati
    • apri la view index.html.erb nella cartella views/prenotatis
  • 21. Salva la view precedente
    • salva la index.html.erb
    • nella cartella viaggis
    • con il nome _prenotati_lista.html.erb
    • Elimina la riga 11 e 22 della chiave straniera
    • Elimina la riga 32 del link
  • 22. Inserisci il parziale nella view
    • Inserisci il parziale nella view show.html.erb
    • <%= render :partial=>”prenotati_lista”, :locals=>{:prenotatis=>
    • Prenotati.find(:all) }
    • %>
  • 23. Prova il programma
  • 24. Abbiamo ottenuto la pagina web desiderata, ma…
    • Abbiamo ottenuto la pagina web desiderata, ma c’è un errore.
    • Naviga su http://localhost:3000/viaggis/2
    • Osserva che il viaggio è cambiato, ma i prenotati sono gli stessi del viaggio precedente !!
    • Ciò è dovuto al fatto che abbiamo passato alla form parziale _prenotati_lista.html.erb, un array contenente il risultato della query :prenotati=>Prenotati.find(:all), che corrisponde alla select * from prenotatis; non c’è nessuna clausola where per restituite solo i prenotati di quel viaggio.
    • Soluzione: metti una clausola :conditions
    • <%= render :partial=>&quot;prenotati_lista&quot;, :locals=>{:prenotatis=>Prenotati.find(:all, :conditions=>[&quot;viaggi_id=?&quot;,@viaggi.id])} %>
  • 25. Soluzione più intelligente definiamo la relazione uno a molti tra le due tabelle
    • Apri il modello Viaggi
    • Inserisci l’istruzione
    • has_many: prenotatis
  • 26. Modifica la view per la nuova relazione
    • Riscrivi la seguente istruzione in /viaggis/show.html.erb
    • Nella riga 35:
    • <%= render :partial=>&quot;prenotati_lista&quot;, :locals=>{:prenotatis=>@viaggi.prenotatis} %>
  • 27. Prova di nuovo il programma
    • Naviga su
    • http://localhost:3000/viaggis/1
    • http://localhost:3000/viaggis/2
    • Devi vedere i viaggiatori prenotati per il primo viaggio nella prima pagina
    • I viaggiatori prenotati per il secondo viaggio nella seconda pagina