情况:
我得到了一个用户模型,它需要通过黑名单上的电子邮件地址列表来验证。黑名单中的电子邮件地址位于一个称为黑名单的额外模型中
型号/用户.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'

黑名单模式也将用于禁止特定的用户名在未来!
问题:
我的问题是黑名单上总是没有也许我的逻辑有问题换言之:是否有可能访问另一个模型中的模型,而不需要任何通信?
感谢您的帮助和道歉,现有的语言错误。我不是以英语为母语的人:)
解决方案!
我没有定义应该使用项目的哪个属性…
    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/

10-09 20:17