Ruby on rails “如何阻止”;mail.ru“;及;163.com“;来自注册的电子邮件(Desive&x2B;Rails 4)

Ruby on rails “如何阻止”;mail.ru“;及;163.com“;来自注册的电子邮件(Desive&x2B;Rails 4),ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我看到很多来自这些电子邮件ID的注册,我想阻止它们。我正在使用Desive+Rails 4 在我的user.rb中,我正在使用 validates :email, presence: true, format: /\w+@\w+\.{1}[a-zA-Z]{2,}/ 但我不知道如何使用格式来阻止这些域。有什么帮助吗 此外,这是正确的方法吗?还是我们可以有更好的方法通过Desive阻止某些域/免费电子邮件提供商 编辑-我发现,在2.5格式部分我可以使用而不使用:但是,我不知道如何阻止163.com

我看到很多来自这些电子邮件ID的注册,我想阻止它们。我正在使用Desive+Rails 4

在我的user.rb中,我正在使用

validates :email, presence: true, format: /\w+@\w+\.{1}[a-zA-Z]{2,}/
但我不知道如何使用格式来阻止这些域。有什么帮助吗

此外,这是正确的方法吗?还是我们可以有更好的方法通过Desive阻止某些域/免费电子邮件提供商


编辑-我发现,在2.5格式部分我可以使用而不使用:但是,我不知道如何阻止163.com和mail.ru的电子邮件注册,我是否可以使用“validates:”两倍于编写一个regexp来排除这两个注册将很困难

只要把它放在某个地方,你就可以让验证保持原样

class User < ActiveRecord::Base

EXCLUDE_DOMAINS = %w{163.com mail.ru}

before_validation do
  domains = EXCLUDE_DOMAINS.join('|')
  pattern = %r{@#{domains}$}
  if matched_domain = pattern.match(self.email)
    self.errors.add(:email, "can't be #{matched_domain}")
  end
end
class用户
谢谢,我已经推送了代码,将等待一天看它是否工作。更新-经过几天的测试,代码工作正常。你知道这些是机器人吗?我以前有过机器人注册,你通常可以在注册表上用蜜罐来阻止它们。此gem应该可以帮助您:。如果你不想使用新的gem,你仍然可以使用这个概念。基本上,你可以添加一个隐藏的表单字段——机器人会笨到填不出来(但真正的用户不会)。如果这个领域有什么东西,它是一个机器人,你阻止注册。这有一个额外的好处,因为它应该阻止任何域这样做。是的,我也有我的理由为机器人注册。感谢gem的建议,我正在安装它并收紧注册流程。