Skip to content

Ruby On Rails : Créer un formulaire de contact

Soyez sociable ! Partagez :
  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

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.

phone_telephone_266159_l

 

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 !

Soyez Sociable ! Partagez !
Published inRubyOnRailsTutoriel
banner