Rails - validates_each只允许某些电子邮件?

时间:2011-01-20 22:41:52

标签: ruby-on-rails ruby-on-rails-3

我的rails3,设计,用户模型(姓名,电子邮件等等)我想防止坏域名在网站上注册。

这个想法是我有一个列入黑名单的域名列表(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 个答案:

答案 0 :(得分:4)

您可以使用validates_format_of和正则表达式更轻松地执行此操作:

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

编辑:

对于许多地址,您可以执行以下操作:

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."