che*_*ell 46 validation ruby-on-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 }
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为它会在电子邮件留空时阻止显示错误消息.
如何在缺少电子邮件时验证电子邮件是否存在,并且仅在输入时验证格式?
Abh*_*aya 80
这应该可以解决问题.
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?
编辑:修复拼写错误.
您可以编写自定义验证功能:
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
Run Code Online (Sandbox Code Playgroud)
或将您的验证人分成2个独立的验证人,条件如下:
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?}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35088 次 |
最近记录: |