Rails, проверяет исключение электронной почты

В настоящее время я пытаюсь проверить атрибуты электронной почты с помощью нескольких вещей:

  1. Свое присутствие
  2. Его формат с регулярным выражением
  3. Его уникальность
  4. Его отсутствие в списке почтовых провайдеров

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

Я в настоящее время это:

  validates :email, :presence   => true,
                    :format     => { :with => email_regex },
                    :uniqueness => { :case_sensitive => false },
                    :exclude => Not working when I put a regex here

Моя проблема не в регулярном выражении, а в том, как исключить соответствие электронной почты с помощью исключающего регулярного выражения.

Можете ли вы помочь мне сделать это?

Сердечно, Роб.

4 ответа

Решение

Если вы используете devise для аутентификации пользователя, вы можете раскомментировать код в devise.rb

  # Email regex used to validate email formats. It simply asserts that
  # one (and only one) @ exists in the given string. This is mainly
  # to give user feedback and not to assert the e-mail validity.
  # config.email_regexp = /\A[^@]+@[^@]+\z/

в противном случае я думаю, что вы можете написать как

в модели

  validates :email, uniqueness: true
  validate  :email_regex

 def email_regex
    if email.present? and not email.match(/\A[^@]+@[^@]+\z/)
      errors.add :email, "This is not a valid email format"
    end
  end

Валидатор формата имеет опцию без (по крайней мере, в рельсах 4 и 3.2), так что...

validates :email, :presence   => true,
                  :format     => { :with => email_regex},
                  :uniqueness => { :case_sensitive => false }
validates :email, :format     => {:without => some_regex}

Сделайте что-нибудь подобное в своей модели.

validate :exclude_emails

private

def exclude_emails
if ( self.email =~ /blah(.*)/ )
  errors.add_to_base("Email not valid")
end
end

Rails предоставляет помощник исключения, а не исключение; в любом случае, он проверяет, что значения атрибутов не включены в данный набор. ( http://guides.rubyonrails.org/active_record_validations.html)

Я думаю, что вы должны использовать собственный метод проверки для решения вашей проблемы ( http://guides.rubyonrails.org/active_record_validations.html).

Другие вопросы по тегам