メールが入力された場合にのみ、メールを検証します。
私は次を試しました:
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 }
ただし、電子メールが空白のままの場合はエラーメッセージが表示されないため、これは機能しません。
不足している電子メールの存在を検証し、入力された形式のみを検証するにはどうすればよいですか?
これでうまくいくはずです。
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
または、バリデーターを条件付きの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?}
精度が不要な場合はフォーマットを検証できます:allow_nil => true