Пользовательская проверка, в две строки? - PullRequest
0 голосов
/ 22 марта 2011

Есть ли способ проверить поле ввода, используя всего несколько строк кода?

Правильно, я не должен делать это при использовании пользовательской проверки.

Модель

class Search < ActiveRecord::Base
  validates :email, :presence => true, :email => true
end

Validator

class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    record.errors[attribute] << (options[:message] || "is not an email") unless
      value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
    end
  end
end

Это то, что я действительно хочу сделать.

class Search < ActiveRecord::Base
  validates :email, :email => lambda  do |record, value|
    record.errors[:email] << "invalid field" unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
  end
end

Это возможно?

Ответы [ 2 ]

0 голосов
/ 06 июля 2011

Вот мое решение.

class Search < ActiveRecord::Base
  validate :my_custom_validator

  def my_custom_validator
    if @email.to_s.match(/hello/)
      self.errors[:email] << "Email can't contain the word 'hello'"
    end
  end
end
0 голосов
/ 22 марта 2011

Посмотрите на validates_format_of ActiveModel http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html#method-i-validates_format_of

class Person < ActiveRecord::Base
  validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
end

Или используйте ярлык:

class Person < ActiveRecord::Base
  validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...