我有一个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
endBlackList类
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发布于 2013-03-29 03:53:57
以防其他人也有这个问题...
类名BlackList (大写L)似乎是一个ActiveModel类名。
我将类名改为Blacklist (一个单词而不是两个),问题就解决了。
https://stackoverflow.com/questions/15645353
复制相似问题