Ruby on rails NoMethodError-未定义的方法`通过电子邮件';对于ActiveModel::MassAssignmentSecurity::黑名单:类:

Ruby on rails NoMethodError-未定义的方法`通过电子邮件';对于ActiveModel::MassAssignmentSecurity::黑名单:类:,ruby-on-rails,ruby,methods,Ruby On Rails,Ruby,Methods,我有一个email_address对象,我正在尝试检查它是否在该特定域的黑名单上。我这样称呼它: elsif @email.blacklisted?(@domain.id) do something ... end 我得到一个错误: NoMethodError - undefined method `by_email' for ActiveModel::MassAssignmentSecurity::BlackList:Class: 我还尝试过使用.find_all_by_id,而不是使

我有一个email_address对象,我正在尝试检查它是否在该特定域的黑名单上。我这样称呼它:

elsif @email.blacklisted?(@domain.id)
  do something ...
end
我得到一个错误:

NoMethodError - undefined method `by_email' for ActiveModel::MassAssignmentSecurity::BlackList:Class:
我还尝试过使用.find_all_by_id,而不是使用我创建的黑名单作用域。同样的错误。这让我快发疯了,任何想法都会令人惊叹

电子邮件地址类

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 EmailAddresstrue,
:唯一性=>true
验证:全局_黑名单,:acceptance=>true
def被列入黑名单?(域id)
黑名单=黑名单。通过电子邮件(self.id)。通过域(domain\u id)
黑色列表。计数>0
结束
结束
黑名单类

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
class黑名单true
验证:email\u address\u id,:presence=>true
验证:date_added,:presence=>true
全局\u黑色\u列表\u阈值=2
作用域:按域,->(域id){where('domain\u id=?',domain\u id}
范围:通过电子邮件,->(电子邮件id){where('email\u address\u id=?',email\u id)}
结束

以防万一其他人有这个问题

类名黑名单(capitol L)似乎是一个ActiveModel类名

我把类名改成了黑名单(一个单词而不是两个单词),问题就消失了