Il passaggio di dati dalla vista al controller avviene per mezzo della variabile params, un hash che contiene tutti i parametri disponibili condivisi sia al controller che alla vista. Per osservare il funzionamento della variabile params modifichiamo il layout che abbiamo utilizzato per tutte le viste, app/views/layouts/standard.html.erb, e introduciamo il codice per visualizzare in testa a tutte le pagine HTML il contenuto della variabile params:
... </head> <body> <%= debug(params) %> <p style="color: green"><%= flash[:notice] %></p> ...
Puntando il browser all'indirizzo http://0.0.0.0:3000/bookmarks vedremo apparire in testa alla pagina un rettangolo grigio che ci informa del contenuto della variabile:
--- !map:HashWithIndifferentAccess action: index controller: bookmarks
I parametri disponibili sono quindi action e controller, che identificano il controller e la action attivati. Se proviamo a selezionare il link show in calce a uno dei bookmark visualizzati, il contenuto della variabile params cambierà in:
--- !map:HashWithIndifferentAccess action: show id: "1" controller: bookmarks
Ora è apparso il parametro id, che è utilizzato dalla action show del controller BookmarksController per estrarre il bookmark che si vuole visualizzare:
@bookmark = Bookmark.find(params[:id])
Nei due esempi appena visti i parametri sono espresso tramite l'URL che richiama la pagina che si vuole visualizzare. Proviamo ora a realizzare un form; inseriamo il seguente codice nella vista app/views/bookmarks/index.html.erb:
<h1>Listing bookmarks</h1>
<% form_tag '/bookmarks', :method => :get do -%>
<%= label_tag 'some_text' %>
<%= text_field_tag 'some_text' %>
<%= submit_tag 'Ok' %>
<% end -%>
<ul>
<% for bookmark in @bookmarks %>
...
L'istruzione form_tag segnala l'inizio del form, che si conclude con l'istruzione end; '/bookmarks' indica il path della action da abbinare al form mentre :method => :get indica il metodo HTTP da utilizzare per l'invio del form.
All'interno del blocco del form appaiono in ordine: il tag per generare la label da abbinare al text field con id 'some_text', il text field e il bottone di submit che avrà come etichetta 'Ok'.
Compilando il text field e premendo il pulsante Ok siamo riportati sulla stessa pagina, ma la variabile params contiene ora il valore del text field e la label del bottone utilizzato per il submit del form:
--- !map:HashWithIndifferentAccess commit: Ok action: index some_text: lorem ipsum controller: bookmarks
La action show del controller bookmarks potrà quindi accedere a questi parametri utilizzando params[:some_text] e params[:commit], ed elaborare i dati secondo la logica dell'applicazione.
È possibile costruire form più complessi; oltre al text_field_tag, Rails mette a disposizione differenti tag per la generazione di input differenti, fra cui:
text_area_tag- per la generazione di input di tipo text areacheck_box_tag- per i check bokradio_button_tag- per i radio buttonpassword_fied_tag- per gli input di tipo passwordselect_tag- per la generazione di liste a discesa
Abbinando un id differente ad ogni tag introdotto nel form si possono rendere disponibili i valori dei differenti campi al controller, e quindi intercettare l'input dell'utente per utilizzarlo nel codice del controller. Dovrà essere nostra cura controllare la bontà dei dati inseriti dall'utente prima di utilizzarli nel codice dell'applicazione.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: