2013-12-23 4 views
0

У меня есть EmailValidator класс внутри модуля, как:Пользовательские рельсы проверки

module ActiveModel 
    module Validations 
    class EmailValidator < EachValidator 
     def validate_each(record, attribute, value) 
     if value.presence && (value =~ /\A[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]+\z/).nil? 
      record.errors[attribute] << (options[:message] || "is invalid") 
     end 
     rescue => e 
     record.errors[attribute] << (options[:message] || "is invalid") 
     end 
    end 
    end 
end 

Я пытаюсь использовать это в моей модели, но перед ошибка загрузки, когда я пытаюсь запустить рельсы сервер =>email_validator.rb определить EmailValidator (LoadError)

Может ли кто-нибудь мне помочь?

+0

Является ли этот модуль в файле с именем 'email_validator.rb'? – Santhosh

+0

есть. этот файл находится в lib/active_model/validations/email_validator.rb. – Smita

+0

имеют это 'config.autoload_paths + =% W (# {config.root}/lib) ' on application.rb? –

ответ

0

Вместо этого я рекомендую использовать the valid_email gem, потому что проверка адресов электронной почты - настоящая боль!

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

    # ... 
end 

Также см this humongous regular expression, который фактически проверяет адреса электронной почты в соответствии с RFC 822.

+0

Я использую активный ресурс. Есть ли способ, которым вы можете использовать проверку подлинности электронной почты, не используя драгоценный камень и не сохраняя код DRY. – Smita

0

validates_format_of: электронная почта,: с => ~ /\A[A-Za-z0-9._%+-] + @ [A-Za-z0-9 .-] +. [A-Za-z] +] z/

0

Вы можете попробовать этот синтаксис и реализовать свой код в соответствии с этим blog, который должен быть очень полезным: -

class EmailValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    if value.presence && (value =~ /\A[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]+\z/).nil? 
     record.errors[attribute] << (options[:message] || "is invalid") 
    end 
    rescue => e 
    record.errors[attribute] << (options[:message] || "is invalid") 
    end 
end 

просто положил этот файл в приложение /validators/email_validator.rb

для рельсов 3 изготовленная под заказ проверка пожалуйста read этот блог.

В Rails 4

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

class foo < ActiveRecord::Base 
    validates :email, presence: true, email: true 
end 

В прошлом очень простой и сухой использование рег. exp.:-

/\A[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]+\z/ 

Это была заимствована из http://www.regular-expressions.info/email.html

Смежные вопросы