2010-06-28 5 views
4

레일 모델 유효성 검사를 특정 순서로 실행하고 이전 유효성 검사가 만족스럽지 않은 경우 특정 유효성 검사를 건너 뛸 수있는 방법이 있습니까?레일 모델 유효성 검사 건너 뛰기 및 순서

예 : 입력란에 start_date 및 end_date 입력란이 2 개 있습니다. 내 모델이 개 검증 방법이 그 중

하나는 날짜가 "12 월 31 일/#은 {Date.today.year + 1}"

def end_date_in_range 
    if self.end_date 
     errors.add_to_base("Enter a date before #{Date.today.year + 1}") if self.end_date > Date.parse("12/31/#{Date.today.year + 1}") 
    end 
end 

내가 다른 검증이있는이 단계보다 적은 검사 시작 날짜로부터

def 
    (self.start_date.to_date .. self.end_date.to_date).inject(0) { |sum, n| ... } 
    end 

이제 사용자가 12/31/20101 같은 종료일을 입력하면 종료 날짜에 날짜를 통해이 첫 번째 검증에 실패하지만 어느 다음 확인 또는 두 번째 유효성을 확인하기 위해 계속처럼 보인다 먼저 실행되고 두 경우 모두 프로세스가 진행되는 동안 내 응용 프로그램이 중단됩니다. 이 요청. 첫 번째 유효성 검사를 확인하고 사용자에게 오류를 반환하고 두 번째 유효성 검사에서 날짜를 단계별로 실행하지 않도록합니다.

덕분에, 재

답변

1

아마 사용 elsif

def end_date_in_range 
    if self.end_date 
     errors.add_to_base("Enter a date before #{Date.today.year + 1}") if self.end_date > Date.parse("12/31/#{Date.today.year + 1}") 
    elsif #second validation test 

    end 
end 
0

(살릴의 대답은이 간단한 경우에 더 잘 작동),하지만이 경우에 필요하지 단일에 파견 몇 가지 검증이있는 경우 조건 세트를 사용하여 유효성 검사에 "if"절을 추가 할 수도 있습니다. 예 :

validates :first_validation 
validates :second_validation, :if => :check_conds_now 
validates :third_validation, :if => :check_conds_now 

# should return true/false 
def check_conds_now 
    (cond1 && cond2 && ! cond3) 
end 
관련 문제