Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Il dialogo fra viste e controller

Il passaggio di informazioni dalle viste al controller e viceversa; link e form
Il passaggio di informazioni dalle viste al controller e viceversa; link e form
Link copiato negli appunti

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 area
  • check_box_tag - per i check bok
  • radio_button_tag - per i radio button
  • password_fied_tag - per gli input di tipo password
  • select_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.

Ti consigliamo anche