2011-12-21 2 views
1

저는 Objective-c 프로그래머입니다. 따라서 메소드 외부에 코드를 갖는 데 익숙하지 않습니다.언제 "유효성 검사"가 실행됩니까?

레일의 validates에 대해 두 부분으로 질문이 있습니다. validates 방법을 정확하게 실행되면

class User < ActiveRecord::Base 
    attr_accessible :name, :email 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

    validates :name, :presence => true, 
        :length  => { :maximum => 50} 

    validates :email, :presence => true, 
        :format  => { :with => email_regex }. 
        :uniqueness => true 

end 
  1. :

    이 코드를 생각해? User 인스턴스를 인스턴스화하거나 클래스 정의가로드 될 때?
  2. 언제 User 실제로 유효성을 검사합니까? User 인스턴스를 저장하거나 만들면 어떻게됩니까?

답변

2

정의이 실행될 때 클래스 정의 내의 모든 호출이 호출되며 인스턴스가 생성 될 때 호출되지 않습니다. email_regex 변수가 인스턴스 변수가 아니라 클래스 정의의 로컬 변수라는 것을 언급 할 필요가 있습니다.

1

1) 이러한 메서드는 User 클래스 자체에서 호출되며 인스턴스 개체에 유효성 검사를 추가합니다.

2) 저장하면.

추신 : valid_email 보석을 사용하여 이메일 주소의 유효성을 검사 할 수 있습니다.

당신은이 작업을 수행 할 수 있습니다

validates :email, :presence => true, :email => true 

을 ... 당신이 당신의 Gemfilevalid_email을 넣어 후에.

+0

+1 보석 제안! – 0xSina

+0

실제로 +1을 클릭 할 수 있습니다. : P –

+0

흠, 왜 등록하지 않았는지 모르겠습니다. – 0xSina

0

1 - 유효성 검사는 모델 저장/생성 전에 콜백으로 수행됩니다. 따라서 모델 승/O 검증을 인스턴스화 할 수 있습니다. 그러나 저장하려고하면 유효성 검사를 통과해야합니다.

2 사용자는 실제로 언제 유효성을 확인합니까? 사용자 인스턴스를 저장하거나 만들면 어떻게됩니까?

사용자가 저장 또는 생성시 유효성이 확인됩니다. 필요한 경우이를 재정의 할 수도 있습니다.

0

레일 콘솔에서 사용해 보셨습니까? 이와 같은 질문이있을 때 나는 종종 대화 형으로 진행되어 어떤 일이 일어나는지 보게됩니다.

./script/console 
Loading develoment environment (...) 
>> #make a user here and see if you can 

사용자를 저장하려고 할 때 지정한 필수 구성 요소가 충족되지 않으면 오류가 발생합니다.

0
  1. user.rb 파일로드시 유효성 검사가 실행됩니다.
  2. #save 또는 #valid를 호출하면 사용자의 유효성이 실제로 검사됩니까?
관련 문제