46 votes

valider le format de l'email uniquement s'il n'est pas vierge Rails 3

Je veux valider l'email seulement si l'email a été saisi.

J'ai essayé ce qui suit :

validates :email, :presence => {:message => "Your email is used to save your greeting."},
                  :email => true,
                  :if => Proc.new {|c| not c.email.blank?},
                  :uniqueness => { :case_sensitive => false }

Cependant, cela ne fonctionne pas car cela empêche les messages d'erreur de s'afficher lorsque l'adresse électronique est laissée vide.

Comment puis-je valider la présence de l'email lorsqu'il est manquant et valider UNIQUEMENT le format lorsqu'il a été saisi ?

80voto

Abhaya Points 1274

Cela devrait faire l'affaire.

validates :email,:presence => {:message => "Your email is used to save your greeting."}, :allow_blank => true,:uniqueness => { :case_sensitive => false } 

Utilisez :allow_blank => true o :allow_nil => true, :if => :email?

edit : corriger la faute de frappe.

7voto

Hck Points 4548

Vous pouvez écrire une fonction de validation personnalisée :

class Model < ActiveRecord::Base
  validate :check_email

  protected
  def check_email
    if email.blank?
      validates :email, :presence => {:message => "Your email is used to save your greeting."}
    else
      validates :email,
        :email => true,
        :uniqueness => { :case_sensitive => false }      
    end
  end
end

ou diviser votre validateur en 2 validateurs distincts avec des conditions :

validates :email, 
  :presence => {:message => "Your email is used to save your greeting."}, 
  :if => Proc.new {|c| c.email.blank?}

validates :email, 
  :email => true,
  :uniqueness => { :case_sensitive => false }
  :unless => Proc.new {|c| c.email.blank?}

1voto

Rolando Points 91

Vous pouvez valider le format si aucune précense n'est requise :allow_nil => true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X