Inserting

668 views
604 views

Published on

Come inserire dei record nel database con rails

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
668
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Inserting

  1. 1. Lezione su Ruby on Rails Prof. Silvano Natalizi Aprile 2009
  2. 5. <ul><li>La scrittura dei dati nella tabella è l’opposto della lettura dei dati </li></ul><ul><li>Invece di avere una view per mostrare i dati, ci occorre una form per sottomettere i dati. </li></ul><ul><li>Invece di avere un metodo del controllore che invii i dati ad una pagina web, ci occorre un metodo che legga i dati di una pagina e li trasformi in un oggetto </li></ul><ul><li>Invece di avere il modello che legga un record e lo converte in un oggetto, ci occorre che il modello converta un oggetto in un nuovo record del database </li></ul>
  3. 6. Che cosa occorre per la Lettura Che cosa occorre per la Scrittura Un modello per leggere un record e convertirlo in un oggetto Un modello per convertire un oggetto in un nuovo record del database Un metodo show del controllore per inviare i dati alla view della pagina web Un metodo create del controllore per leggere i dati di una form della pagina web e trasformarli in un oggetto Una view per mostrare dati in output Una form per digitare e sottomettere i dati in input
  4. 9. <ul><li>I campi della form combaciano con quelli dell’oggetto </li></ul><ul><li>Con l’eccezione della chiave primaria id </li></ul><ul><li>Il nome del campo della form deve coincidere con quello dell’attributo dell’oggetto </li></ul><ul><li>Ad un certo punto l’applicazione deve trasferire i dati tra la form e l’oggetto </li></ul>
  5. 10. <ul><li>Ai campi della form occorre dare dei nomi che esplicitamente corrispondano a quelli del modello </li></ul>
  6. 12. <ul><li><% form for %> </li></ul><ul><li>Questo tag viene usato per generare una form </li></ul><ul><li>L’istruzione è: </li></ul><ul><li><% form for(@ad,:url=>{:action=>’create’}) do |f| %> </li></ul><ul><ul><li>@ad specifica per quale oggetto si vuole fare la form </li></ul></ul><ul><ul><li>:action=>’create’ indica quale metodo del controllore dovrà elaborare i dati della form </li></ul></ul>
  7. 13. <ul><li>I campi della form sono generati con espressioni simili a questa: </li></ul><ul><li><p ><b>Nome</b>br /> <%= f.text_field :price %> </p> </li></ul><ul><li>:price indica il nome della variabile </li></ul>
  8. 14. <ul><li>Il bottone submit, per inviare al server i dati della form, viene generato con la seguente istruzione: </li></ul><ul><li><%= f.submit “create” %> </li></ul>
  9. 16. <ul><li>La pagina “New ad” con la form per digitare i dati deve apparire con l’indirizzo url </li></ul><ul><li>http://mebay.com/ads/new </li></ul><ul><li>Mentre la form è inviata all’elaborazione con </li></ul><ul><li>http://mebay.com/ads/create </li></ul><ul><li>Pertanto occorre che nel file routes.rb siano inserite le relative route; perché una route dice a rails quale parte di codice deve usare per soddisfare la richiesta del browser </li></ul>
  10. 17. <ul><li>map.connect ‘/ads/new’, :controller=>’ads’, :action=>’new’ </li></ul><ul><li>map.connect ‘/ads/create’, :controller=>’ads’, :action=>’create ’ </li></ul>
  11. 18. <ul><li>Nel controllor ‘ads’ devono pertanto essere scritti i metodi new e create. </li></ul><ul><li>Nel metodo ‘new’ bisogna mettere l’istruzione che crea un oggetto di tipo ads </li></ul><ul><li>@ad= Ad.new </li></ul><ul><li>Se non viene scritta questa istruzione, quando andiamo a testare l’url corrispondente, Rails dà il seguente errore. </li></ul>
  12. 20. <ul><li>Per default, una variabile ,ad esempio, @ad è settata con un valore speciale chiamato nil , che significa nessun valore. </li></ul><ul><li>una variabile nil non ha nessun attributo, come ad esempio @ad.name, @ad.description,… </li></ul><ul><li>Una variabile @ad nil causa problemi alla form for(@ad…) </li></ul><ul><li>La form è basata sull’oggetto @ad, perché essa accede a ciascun attributo dell’oggetto per generare i valori iniziali dei campi della form. </li></ul>
  13. 23. <ul><li>La combinazione di un metodo del controllore e di una view costituisce una azione! </li></ul><ul><li>Pertanto il nome di un’azione deve essere sia un metodo del controllore che il nome di una view. </li></ul>
  14. 26. <ul><li>La form usa il protocollo http per inviare i dati al server </li></ul><ul><li>Pertanto sulla rete non viaggia l’oggetto, ma viaggiano i dati della form </li></ul><ul><li>Come sono formattati i dati ? </li></ul>
  15. 27. <ul><li>I campi della form sono memorizzati nella struttura dati (hash o array associativo) params </li></ul><ul><li>In questa struttura dati sono memorizzati sia i valori che i nomi dei campi della form </li></ul><ul><li>Praticamente si ha ha una tabella che fa corrispondere a ciascun nome di campo il suo valore come digitato nella form. </li></ul>
  16. 29. <ul><li>Il metodo create deve salvare i campi della form nel database </li></ul><ul><li>Rails può solo usare oggetti per parlare al database. </li></ul><ul><li>Pertanto, prima di salvare i dati della form, rails deve convertirli in un oggetto </li></ul><ul><li>Il metodo new deve essere eseguito passando in input i dati della form, ossia di params, per inizializzare gli attributi del nuovo oggetto </li></ul><ul><li>@ad=Ad.new(params[:ad]) </li></ul>
  17. 30. <ul><li>Dopo aver convertito i dati della form in un oggetto, </li></ul><ul><li>Occorre salvare questo oggetto nel database, con l’istruzione </li></ul><ul><li>@ad.save </li></ul><ul><li>Rails ispeziona tutti gli attributi e genera gli SQL statements di insert </li></ul>
  18. 32. <ul><li>def create </li></ul><ul><ul><ul><li>@ad=Ad.new(params[:ad]) </li></ul></ul></ul><ul><ul><ul><li>@ad.save </li></ul></ul></ul><ul><ul><li>end </li></ul></ul>
  19. 35. <ul><li>Quando viene completata l’esecuzione del metodo create, un nuovo record è correttamente memorizzato nel database. </li></ul><ul><li>Poi rails deve generare una pagina di risposta e va a cercare una view con il medesimo nome create.html.erb. </li></ul><ul><li>Ma questo template non esiste! </li></ul>
  20. 37. <ul><li>Creiamo il file create.html.erb per confermare che il record è stato creato correttamente e per fornire il link al nuovo record </li></ul><ul><li><h1>Ad creato!</h1> </li></ul><ul><li>Esamina il record<a href=“/ads/< %=@ad.id % >”>qui</a> </li></ul>

×