Проверять формат электронной почты только в том случае, если не пустой Rails 3
Я хочу проверить электронную почту только в том случае, если письмо было введено.
Я попробовал следующее:
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 }
Однако это не работает, так как оно не позволяет сообщениям об ошибках показывать, когда электронное письмо остается пустым.
Как я могу проверить наличие электронной почты, когда она отсутствует, и ТОЛЬКО проверять формат, когда он был введен?
Ответы
Ответ 1
Это должно сделать трюк.
validates :email,:presence => {:message => "Your email is used to save your greeting."}, :allow_blank => true,:uniqueness => { :case_sensitive => false }
Используйте :allow_blank => true
или :allow_nil => true, :if => :email?
Изменить: установить опечатку.
Ответ 2
Вы можете написать специальную функцию проверки:
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
или разделите валидатор на два отдельных валидатора с условиями:
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?}
Ответ 3
вы можете проверить формат, если не требуется
: allow_nil = > true