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

Inserting

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