モデルベリファイア

1413 ワード

まず、ベリファイアを書きます.
 
 
class EmailValidator < ActiveRecord::Validator
  def validate()
    record.errors[:email] << "is not valid" unless
      record.email =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
  end
end

 
validatesでwith使用:
 
 
class User < ActiveRecord::Base
  validates_with EmailValidator
end

 
パラメータ付きのベリファイアの例を次に示します.
 
 
class EmailValidator < ActiveRecord::Validator
  def validate()
    email_field = options[:attr]
    record.errors[email_field] << "is not valid" unless
      record.send(email_field) =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
  end
end

 
 
class User < ActiveRecord::Base
  validates_with EmailValidator, :attr => :email_address
end

 
 
class User < ActiveRecord::Base
  validates_with EmailValidator, :if => Proc.new  { |u| u.signup_step > 2 },
    :attr => :email_address
end
 
複数のベリファイアを同時に使用することもできます.
 
 
class User < ActiveRecord::Base
  validates_with EmailValidator, ZipCodeValidator, :on => :create
end