我的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
您怎么看?
答案 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."