Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-验证每封邮件以仅允许某些电子邮件?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails-验证每封邮件以仅允许某些电子邮件?

Ruby on rails Rails-验证每封邮件以仅允许某些电子邮件?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,对于我的rails3、Desive、用户模型(姓名、电子邮件等),我希望防止坏域名在网站上注册 我的想法是我有一个黑名单域名(badplace.com,hotmail.com)。。。当一个新的用户记录被保存时,我会检查电子邮件,如果它有一个坏域名,我会添加一个错误 那么,在Rails中实现这一点的正确方法是什么呢 以下是我一直在玩的游戏: 在用户的模型中 protected validates_each :email, :on => :create do |record, attr,

对于我的rails3、Desive、用户模型(姓名、电子邮件等),我希望防止坏域名在网站上注册

我的想法是我有一个黑名单域名(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

您认为呢?

使用
验证格式和正则表达式,您可以更轻松地做到这一点:

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

谢谢你指出这一点。这里的问题是我会收到几十封坏邮件。可以不使用var吗?还有,消息的作用是什么?我不想添加record.errors,以便表单可以显示出错的内容,请注意消息是否会自动执行此操作?thxsYes,消息将自动添加到
记录中。错误
。如果您不指定它,则
validates\u format\u的默认消息为“is invalid”。此外,我将在一秒钟内更新我的答案,以了解如何处理多个地址。是否有其他验证会干扰
validates\u format\u?这是我能想到的唯一一件事。我只是用Desive和Desive invitable尝试了相同的代码。对我来说很好。您确定没有在模型上添加任何其他自定义验证吗?您能完整发布模型吗?第162行:
保存(:validate=>false)
。我猜这就是问题所在。:)
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."