Ситуация:
У меня есть модель user, которую нужно проверить списком адресов электронной почты из черного списка. Адреса электронной почты из черного списка находятся в дополнительной модели под названием черный список.
модели / 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
модели / blacklist.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] черный список всегда ноль. Может что-то не так с моей логикой? Другими словами: можно ли получить доступ к модели внутри другой модели без согласования?
Заранее благодарим за помощь и приносим извинения за существующие языковые ошибки. Я не родной английский :)
РЕШЕНИЕ! Я пропустил определение, какой атрибут элемента следует использовать ...
errors.add(:email, 'is blacklisted') if self.email.match(item.name)
Иногда моему мозгу не нравится то, что мне нравится ...
Blacklist
изUser
, иначе вы получите исключение ... Однако попробуйте изменить@blacklist
на _4 _... я думаю, что валидаторы вызываются как методы класса, а не методы экземпляра (и, следовательно, не есть экземпляры vars) - person mhutter   schedule 28.09.2012