2014-04-08 5 views
2

레일 가이드 (http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations)에서 사용자 정의 유효성 검사를 진행하고 있으며 여기에 무슨 일이 일어나는지 이해하는 데 어려움이 있습니다. EmailValidator는 어떻게 사용됩니까? 어디에서 부름을 받았습니까?레일 4 사용자 정의 유효성 검사기 명확화

class EmailValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i 
     record.errors[attribute] << (options[:message] || "is not an email") 
    end 
    end 
end 

class Person < ActiveRecord::Base 
    validates :email, presence: true, email: true 
end 

모든 코드는 어디에 있습니까?

답변

3

validates 메서드를 실행하면 해시가 전달됩니다. 해시가 건네 받으면 (자),이 메소드는 반복 해, 각 키에 대해서, 지정된 열쇠에 일치하는 이름의 발리 데이터를 인스턴스화합니다. 따라서 presence: true을 전달하면 PresenceValidator의 새 인스턴스를 인스턴스화하고 마찬가지로 confirmation: trueConfirmationValidator을 인스턴스화합니다. true 대신 값이 해시 인 경우 유효성 검사기로 전달되어 options 리더가 액세스하는 인스턴스 변수 @options에 저장됩니다.

+0

어디에서 EmailValidator 코드를 배치합니까? 그 설명을 어디에서 얻었습니까? 나는 그것에 대해 더 많이 읽고 싶다. – Mulaiko

+0

@Mulaiko - 레일의 아름다움은 문서가 아닌 코드를 실제로 읽을 수 있다는 것이다. 여기에 다음 두 가지를 모두 읽을 수 있습니다 : http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates (끝에 작은 Source : hide | GitHub 비트가 있습니다.) – BroiSatse

+0

@ Mulaiko - 유효성 검사기를 넣을 위치와 관련하여 - 자동로드 경로에있는 폴더에 이들을 넣어야합니다. 개인적으로 lib/validator에 넣으십시오 (application.rb의 autoload path에 추가해야합니다). 어떤 사람들은 – BroiSatse

관련 문제