inserting

38
Lezione su Ruby on Rails Prof. Silvano Natalizi Aprile 2009

Upload: silvano-natalizi-itis-alessandro-volta-perugia

Post on 28-Nov-2014

1.135 views

Category:

Education


0 download

DESCRIPTION

Come inserire dei record nel database con rails

TRANSCRIPT

Page 1: Inserting

Lezione su Ruby on Rails

Prof. Silvano Natalizi

Aprile 2009

Page 2: Inserting
Page 3: Inserting
Page 4: Inserting
Page 5: Inserting

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

Page 6: Inserting

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

Page 7: Inserting
Page 8: Inserting
Page 9: Inserting

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

Page 10: Inserting

Ai campi della form occorre dare dei nomi che esplicitamente corrispondano a quelli del modello

Page 11: Inserting
Page 12: Inserting

<% 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

Page 13: Inserting

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

Page 14: Inserting

Il bottone submit, per inviare al server i dati della form, viene generato con la seguente istruzione:

<%= f.submit “create” %>

Page 15: Inserting
Page 16: Inserting

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

Page 17: Inserting

map.connect ‘/ads/new’, :controller=>’ads’, :action=>’new’

map.connect ‘/ads/create’, :controller=>’ads’, :action=>’create’

Page 18: Inserting

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.

Page 19: Inserting
Page 20: Inserting

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.

Page 21: Inserting
Page 22: Inserting
Page 23: Inserting

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.

Page 24: Inserting
Page 25: Inserting
Page 26: Inserting

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 ?

Page 27: Inserting

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.

Page 28: Inserting
Page 29: Inserting

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])

Page 30: Inserting

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

Page 31: Inserting
Page 32: Inserting

def create

@ad=Ad.new(params[:ad])

@ad.save

end

Page 33: Inserting
Page 34: Inserting
Page 35: Inserting

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!

Page 36: Inserting
Page 37: Inserting

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/<

%[email protected] %>”>qui</a>

Page 38: Inserting