ruby-on-rails - Rails 自定义电子邮件验证器 |黑名单

标签 ruby-on-rails ruby validation model blacklist

情况:

我有一个用户 模型,它需要通过列入黑名单的电子邮件地址列表进行验证。列入黑名单的电子邮件地址位于名为黑名单

的额外模型中

模型/用户.rb:

    class User < ActiveRecord::Base
            validate :email_is_not_blacklisted

            def email_is_not_blacklisted
                    @blacklist = Blacklist.where(:blacklist_type => "E-Mail")

                    @blacklist.each do |item|
                            errors.add(:email, 'is blacklisted') if self.email.match(item)
                    end
            end
    end

模型/黑名单.rb

    class Blacklist < ActiveRecord::Base
            attr_accessible :name, :blacklist_type

            #some validation code for blacklist items ...
    end

黑名单条目示例

    #:        name,            blacklist_type
    #1:       'demo-mail.com', 'E-Mail'
    #2:       'test123.com',   'E-Mail'

future 还将使用黑名单模型来禁止特定用户名!

问题:

我的问题是[at]blacklist 总是nil。也许我的逻辑有问题?换句话说:是否可以在没有关联的情况下访问另一个模型中的模型?

提前感谢您的帮助,对于现有的语言错误深表歉意。我不是以英语为母语的人:)

解决方案! 我错过了定义项目的哪个属性应该被使用...

    errors.add(:email, 'is blacklisted') if self.email.match(item.name)

有时我的大脑不喜欢我喜欢的方式......

最佳答案

我会建议你使用这个

class User < ActiveRecord::Base
  validate :email_is_not_blacklisted

  def email_is_not_blacklisted
    if Blacklist.find_by_blacklist_type_and_name("E-Mail",self.email)
       errors.add(:email, 'is blacklsited') 
    end
  end
end

这会比以前的更快

关于ruby-on-rails - Rails 自定义电子邮件验证器 |黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12638999/

相关文章:

ruby-on-rails - Mailman多次保存邮件

css - 如何在 rspec (Rails 4/rspec3) 上测试文件大小

html - 样式导航栏 : interaction between different styling settings

ruby-on-rails - ruby 版本中的 p180 是什么?

java - TDD 最佳实践 - Java 对象验证和干净代码

使用日期选择器进行 jquery 验证,突出显示问题

ruby-on-rails - 如何验证 Rails 5 中的组合值?

ruby-on-rails - rails 验证父范围内的唯一性

ruby-on-rails - 如何运行 rake 任务?

ruby-on-rails - Ubuntu + apache2 + Passenger 上的 Ruby On Rails