나는 블랙리스트 전자 메일 주소 목록에 의해 검증 될 필요가있는 사용자 모델을 얻었다. 블랙리스트에 전자 메일 주소가 추가 모델에있는이 블랙리스트라는
모델/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'
블랙리스트 모델은 앞으로 특정 사용자 이름을 금지하십시오!
문제 :
내 문제가 [시] 블랙리스트 항상 전무 것입니다. 내 논리에 문제가있을 수 있습니까? 다른 말로하면, 어쨌든 accosiation없이 다른 모델 내부의 모델에 액세스 할 수 있습니까?
사전에 도움을 주셔서 감사 드리며 기존 언어의 잘못에 사과드립니다. 나는 원어민이 아니다 :)
해답! 나는
errors.add(:email, 'is blacklisted') if self.email.match(item.name)
가끔 내 머리는 내가 좋아하는 방식으로 ...
흠 때문에 기본적으로는 User''내에서'Blacklist' 액세스 할 수 있습니다, 또는 당신은 ... 그러나'변경 시도 예외를 얻을 것 @ blacklist'을'blacklist'로 ... validat라고 생각합니다. ors는 인스턴스 메소드가 아닌 클래스 메소드로 호출됩니다 (따라서 인스턴스 변수는 없습니다) – mhutter