Beaucoup (voir tous) des sites web que je développe demande un formulaire de contact. Cette page contenant des informations précieuses à propos de la société, où parfois un petit formulaire nous permettant de contacter l’entreprise. Bref, une page plus que présente sur le web.
Aujourd’hui, j’aimerai vous présenter comment créer un formulaire de contact avec Ruby On Rails.
Créer un formulaire de contact avec Ruby On Rails
Le model
Vous serez probablement d’accord avec moi, il est très rare de vouloir sauvegarder en base de données les mails que vous envoient les utilisateurs (a moins d’avoir une très grosse entreprise… genre… Facebook, ou Google).
Il faut donc créer un model qui ne soit pas relié à la base de données :
class Contact attr_accessor :firstname, :lastname, :email, :message validates :lastname, :firstname, :email, :message, presence: true validates :email, :format => { :with => %r{.+@.+\..+} }, allow_blank: true end
Si vous utilisez ce model, vous aurez quelques problèmes, notamment, parce que la validation des données n’est pas incluse dans votre “class” et oui, “ActiveRecord::Base” inclut aussi la validation des données. Il faut donc l’inclure :
include ActiveModel::Validations include ActiveModel::Conversion extend ActiveModel::Naming
Ensuite, il vous faut également créer deux méthodes :
def persisted? false end def initialize(attributes = {}) attributes.each do |name, value| send("#{name}=", value) end end
“persisted?” est une fonction créée juste pour que ça ne bug pas !
“initialize” permet tout simplement d’utiliser le
Contact.new params[:contact]
Car cette fonction est incluse également dans le “ActiveRecord::Base” .
On a fait le tour du model, jetons un oeil maintenant au controller
Le controller
Le controller est très simple (comme devrait l’être tous controllers…).
Pour l’envoie d’un nouveau message, on va utiliser l’opération….
*roulement de tambour*
NEW
Ensuite pour, la création et l’envoie, je vous le donne en mille, on utilise l’opération CREATE :
class ContactsController < ApplicationController def new @contact = Contact.new end def create @contact = Contact.new params[:contact] if @contact.valid? Mailer.contact_form(@contact).deliver # Je vais expliquer cette ligne juste après... redirect_to new_contact_path, flash: {success: t(:"create.message_has_been_sent")} else render :new end end end
Le Mailer
“Mailer.contact_form(@contact).deliver”
En fait Mailer est une class proposée par Rails permettant la gestion d’envoie de mail. Elle est gérée de la même manière qu’un controller. C’est à dire que Mailer possède un ensemble de procédure liée à une vue pouvant être imbriquée dans un layout.
Dans le dossier app/mailers, on créé un fichier mailer.rb dont voici le contenu :
class Mailer < ActionMailer::Base layout 'mailer' def contact_form(contact) @contact = contact @to = "<un email>" mail(to: @to, subject: "Nouveau contact depuis le site") do |format| format.html end end end
Donc, nous avons une class Mailer héritant de “ActionMailer” ayant pour layout “mailer“.
Cette classe possède une procédure “contact_form” prenant en charge l’envoie d’un email au format HTML.
@to prend l’email de la personne à qui doit être envoyé l’email.
La vue
La vue est la façon dont sera envoyée le mail :
%p Un nouveau message a été envoyé depuis le site : %p %strong= "Nom : " = @contact.lastname %br %strong= "Prénom : " = @contact.firstname %br %strong= "Adresse email : " = @contact.email %br %strong= "Message : " %br = simple_format @contact.message
J’utilise du HAML à vous de le transformer si vous utilisez du erb.
Il ne vous reste plus qu’à paramétrer votre serveur d’envoie de mail (j’utilise mailjet), et le tour est joué !
Qu’avez-vous pensé de ce tutoriel ? Avez-vous aimé ? Faites-vous autrement ? Dites m’en plus !
Enjoy it !