1

状況:

ブラックリストに登録された電子メールアドレスのリストによって検証する必要があるユーザーモデルを取得しました。ブラックリストに登録された電子メールアドレスは、ブラックリストと呼ばれる追加のモデルにあります。

models / user.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'

ブラックリストモデルは、将来的に特定のユーザー名を禁止するためにも使用されます。

問題:

私の問題は、[at]ブラックリストが常にnilであるということです。たぶん私のロジックに何か問題がありますか?言い換えれば、とにかく宿泊施設なしで別のモデル内のモデルにアクセスすることは可能ですか?

事前にご協力いただきありがとうございます。既存の言語の誤りについてお詫び申し上げます。私は英語を母国語とはしていません:)

解決! アイテムのどの属性を使用するかを定義できませんでした...

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

時々私の脳は私の好きな方法が好きではありません...

4

3 に答える 3

3

これを使用することをお勧めします

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

これは以前のものよりも速くなります

于 2012-09-28T12:54:01.390 に答える
0

大文字と小文字の区別。blacklist-type = "E-Mail" を検索しており、例のデータは "email" です

于 2012-09-28T11:37:51.260 に答える
0

私のコメントを拡張するには、これを試してください:

class User < ActiveRecord::Base
  validate :email_is_not_blacklisted

  def email_is_not_blacklisted
    Blacklist.find_all_by_blacklist_type("E-Mail").each do |item|
      errors.add(:email, 'is blacklsited') if.self.email.match(item)
    end
  end
end
于 2012-09-28T12:06:52.367 に答える