TUTORIEL/PRATIQUE
 
25/02/2009

Validation d'un formulaire non lié à la base de données avec Ruby on Rails

Si la majorité des applications Internet reposent sur une base de données, certains traitements ne nécessitent pas d'avoir recours à une telle infrastructure.
  Envoyer Imprimer  

En savoir plus
  • Expliquez-moi... : Ruby

Ruby on Rails est réputé pour ses fonctionnalités en termes d'application Internet "database driven" mais même si la majorité des applications Internet d'aujourd'hui reposent sur une base de données, certains traitements ne nécessitent pas toujours l'utilisation d'une base de données. Comment valider proprement un formulaire de contact qui enverra un email par exemple ?

ActiveForm (disponible ici), permet de traiter ce cas en à peine quelques lignes ! Tout d'abord il faut créer un modèle héritant de ActiveForm dans lequel on défini les validations habituelles de Rails et les attributs du formulaire :

 class FormContact < ActiveForm
  attr_accessor :motif, :message
  validates_presence_of :motif, :message
end

 

 

Dans notre contrôleur, on instancie un nouvel objet ContactForm avant d'afficher le formulaire :

 def index
  @form_contact = FormContact.new
end

 

Puis notre vue :

 <% form_for(:form_contact, :url => {:action => :create}) do |f| %>
 <%= error_messages_for(:form_contact) %>
 <%= f.text_field(:motif) %>
 <%= f.text_area(:message) %>
 <%= submit_tag('Envoyer') %>
<% end %>

 

Il ne reste plus qu'à utiliser toute la puissance d'ActiveForm pour valider notre formulaire comme on le ferait pour n'importe quel objet ActiveRecord :

 def contact
  @form_contact = FormContact.new(params[:form_contact])
  if @form_contact.valid?
    ContactMailer.deliver_contact(@form_contact)
  else
    render(:action => 'index')
  end
end

 

En savoir plus
  • Expliquez-moi... : Ruby

PS : attention à ne pas confondre avec ce gem homonyme !

 

Contenu proposé sous licence Creative Commons par Stéphane Brun


JDN Développeur Envoyer Imprimer Haut de page
Votre avis sur cette publicité

Sondage

Quel est votre système Linux de prédilection ?

Tous les sondages

BOURSE

 

RUBRIQUES