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

I form in Ruby - I

Come si creano moduli di interazione con l'utente in Ruby on Rails: la creazione del form e dell'azione
Come si creano moduli di interazione con l'utente in Ruby on Rails: la creazione del form e dell'azione
Link copiato negli appunti

L'applicazione che stiamo sviluppando comincia a prendere forma, ma manca della parte fondamentale: la possibilità di inserire nuovi topic e messaggi, nonché la possibilità per gli utenti di registrarsi ed effettuare il login. 

Tutte e tre le funzionalità dipendono da una delle funzionalità più importanti per applicazioni web strutturate, e cioè la possibilità per i visitatori di inserire nuovi dati, operazione che è possibile fare tramite i form.

Rails fornisce diversi livelli di supporto per la creazione di form, permettendo sia di andare ad un livello molto vicino al normale codice HTML, sia di automatizzare l'inserimento di oggetti complessi.

Aggiungere un nuovo messaggio, così come un nuovo topic, è un'operazione strettamente collegata all'identificazione di un utente, ma inizialmente non ce ne preoccuperemo, rimandando la gestione dell'autenticazione alla prossima volta, e nasconderemo le funzionalità di ricerca dell'autore dietro un metodo ausiliario che andremo a definire in HomeController (cioè nel file app/controllers/home_controller.rb), con un codice come questo:

def find_author
 return Author.find(:first)
end
protected :find_author

Questo è un metodo di utilità che ha senso solamente all'interno del controller. In futuro, quando avremo ben definito la parte di autenticazione potremo includere in questo metodo qualcosa di più utile, senza intervenire sul resto dell'applicazione. Riguardo al codice c'è solo una cosa da notare: il metodo viene dichiarato come protected, il che fa sì che non sia visibile dall'esterno e quindi non sia considerato un'azione.

Notate come protected non sia una parola chiave, ma ancora una volta sia un semplice metodo, proprio come avevamo visto per scaffold. Una nota sulla sintassi: è possibile usare protected (ed il suo analogo private) sia con un argomento in questo modo:

class Foo
  def bar
  end
  def baz
  end
  protected :baz
end

sia senza nessun argomento, ed in questo caso esso fa sì che tutti i metodi definiti dopo quella linea seguenti siano considerati protetti:

class Foo
  def bar
  end
  protected
  def baz
  end
end

Il risultato è esattamente lo stesso.

Far sì che si possa aggiungere un messaggio ad un topic esistente richiede due cose: che ci sia un form nella pagina di visualizzazione di una discussione, e che ci sia un'azione a gestire i dati del form. Il file show.rhtml (app/views/entries/show.rhtml) dovrà quindi diventare una cosa simile: 

<h2><%= @topic.title %> </h2>

<%= render(:partial => "message", :collection=>@topic.messages ) %>
  
<h3>Aggiungi un nuovo messaggio</h3>

<form action="/home/add_message" method="post">
  Testo: <%= text_area_tag "body" %>
  <%= hidden_field_tag "topic_id", @topic.id %>
  <br />
  <%= submit_tag("Aggiungi messaggio") %>
</form>

Notate il modo in cui abbiamo riutilizzato la variabile @topic che era servita per mostrare i messaggi, evitando di dover cambiare anche solo una linea di codice nel metodo relativo a questa vista.

Ti consigliamo anche