A questo punto gli ultimi form che dobbiamo aggiungere sono quelli relativi alla registrazione e al login degli utenti, per poi far sì che solo gli utenti registrati possano inviare messaggi e creare nuovi argomenti di discussione. La prima cosa necessaria sarà quindi la possibilità per un autore di registrarsi e di effettuare il login.
Creiamo quindi un nuovo controller adibito a questo scopo, con due metodi new
e login
tramite il solito script/generate
.
L'azione new
sarà molto simile a quelle già realizzate, ma ovviamente il form sarà differente, in quanto avrà bisogno di avere tre caselle di testo: una per il nickname, una per la password ed una per verificare quest'ultima. Per realizzare il modulo, però, utilizzeremo un codice leggermente differente:
<%= start_form_tag(:action=>"new") %>
Username: <%= text_field( "author", "name") %>
<br />
Password: <%= password_field( "author", "password") %>
<br />
Verifica Password: <%= password_field( "author", "password_confirmation" ) %>
<br />
<%= submit_tag "registra" %>
<%= end_form_tag %>
Questa volta abbiamo usato degli helper per creare i tag del form, il cui significato dovrebbe essere chiaro. Abbiamo anche usato degli helper leggermente più sofisticati per gestire user e password, potete riconoscerli in quanto il loro nome non finisce con "_tag". Questi helper, sono specificamente pensati per costruire form dedicati alla creazione di oggetti, ed ovviamente ne esistono di adatti ad ogni tipo di input, come aree di testo, check box, file upload e così via.
Quando l'azione richiamata dal form andrà ad analizzare i valori tramite params
, troverà qualcosa di meglio di una semplice stringa, infatti alla chiave "author" corrisponderà un Hash con chiavi "password", "password_confirmation" e "name". Se vi state chiedendo dove sia l'utilità in tutto ciò, vi basti ricordare che il metodo Author.new
può accettare in input proprio un Hash di questo tipo, e quindi la creazione di un oggetto diventa semplicemente Author.new(params['author'])
.
Usando lo stesso approccio già usato per creare un nuovo topic, potremo definire il metodo relativo all'azione in questo modo:
def new
if request.post?
@author=Author.new(params['author'])
if @author.save
logged
end
end
end
logged
per ora non farà altro che rimandare l'utente alla prima pagina, si tratta di un metodo protetto definito in questo modo:
def logged
redirect_to(:controller=>"home")
end
protected :logged