0

その特定のドメインのブラックリストにあるかどうかを確認しようとしているemail_addressオブジェクトがあります。私はそれをこのように呼んでいます:

elsif @email.blacklisted?(@domain.id)
  do something ...
end

エラーが発生しました:

NoMethodError - undefined method `by_email' for ActiveModel::MassAssignmentSecurity::BlackList:Class:

また、作成したブラックリストスコープを使用する代わりに、.find_all_by_idを実行してみました。ただし、同じエラー。これは私を夢中にさせています、どんなアイデアも素晴らしいでしょう!

EmailAddressクラス

class EmailAddress < ActiveRecord::Base
  attr_accessible :email, :global_blacklist

  has_many :transactions
  has_many :black_lists
  has_many :opt_outs

  validates :email, :presence => true,
          :uniqueness => true
  validates :global_blacklist, :acceptance => true

  def blacklisted?(domain_id)
    black_lists = BlackList.by_email(self.id).by_domain(domain_id)

    black_lists.count > 0
  end
end

ブラックリストクラス

class BlackList < ActiveRecord::Base

  attr_accessible :domain_id, :email_address_id, :date_added

  belongs_to :domain
  belongs_to :email_address

  validates :domain_id, :presence => true
  validates :email_address_id, :presence => true
  validates :date_added, :presence => true

  GLOBAL_BLACK_LIST_THRESHOLD = 2

  scope :by_domain, ->(domain_id) { where('domain_id = ?', domain_id) }
  scope :by_email, ->(email_id) { where('email_address_id = ?', email_id) }


end
4

1 に答える 1

0

他の誰かがこの問題を抱えている場合に備えて...

クラス名BlackList(キャピトルL)はActiveModelクラス名のようです。

クラス名をブラックリスト(2語ではなく1語)に変更すると、問題は解決しました。

于 2013-03-28T19:53:57.037 に答える