Rails - validates_each, чтобы разрешить только определенные электронные письма? - PullRequest
3 голосов
/ 21 января 2011

для моих rails3, devise, модели пользователей (имя, адрес электронной почты и т. Д.) Я хочу предотвратить регистрацию плохих доменов на сайте.

Идея заключается в том, что у меня есть список доменов в черном спискеbadplace.com, hotmail.com) ... и когда новая запись пользователя будет сохранена, я проверяю электронную почту, если у нее домен с плохим доменом, я добавляю ошибку.

Итак, как правильно реализовать это в Rails ...

Вот то, с чем я играл:

В модели пользователя

protected
  validates_each :email, :on => :create do |record, attr, value|
     domain = email.split("@").last
     record.errors.add attr, "That's a BAD EMAIL." unless value && !value.contains(domain)
  end

Что ты думаешь?

1 Ответ

4 голосов
/ 21 января 2011

Вы можете сделать это проще с помощью validates_format_of и регулярного выражения:

class User < ActiveRecord::Base
  validates_format_of :email, :without => /badplace\.com|hotmail\.com/, :message => "That's a BAD EMAIL."
end

EDIT:

Для многих адресов вы можете сделать что-то вроде этого:

INVALID_EMAILS = %w(badplace.com hotmail.com)
validates_format_of :email, :without => /#{INVALID_EMAILS.map{|a| Regexp.quote(a)}.join('|')}/, :message => "That's a BAD EMAIL."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...