2012-11-29 4 views
2

빈 이것은 생각할 필요도없는 종류의 것 같다 때 numericality가 인수 오류가 발생 유효성을 검사하지만 난 번호가 필요하고 미리 정해진 양보다 크거나 작은 있는지 확인하려면 :레일 3/전무

validates :age_min, presence: true, numericality: { 
    greater_than: 0, less_than_or_equal_to: :age_max 
} 
나는 시도하고 테스트 할 때

이 테스트는 age_min이 필요하다는 것을, 그러나

test 'user should not be valid with age min greater than age max' do 
    user = FactoryGirl.build(:user, age_min: 30, age_max: 20) 
    assert !user.valid? 
end 

을 예상대로 작동합니다

test 'user should not be valid without age_min' do 
    user = FactoryGirl.build(:user, age_min: nil, age_max: 20) 
    assert !user.valid? 
end 

내가 얻을 ArgumentError: comparison of Float with nil failed

레일스가 아무 가치도 고려하지 않는다는 것이 이상하게 보입니다. 사용자 정의 유효성 검사기를 작성하지 않고도이 작업을 수행 할 수 있어야하지만 실수가 아닐 수 있습니다.

+0

당신의 검증의 두 무기 호 값에 반대하고 보호 유효성 검사를 분할 할 생각 때문에 실행 중입니다. "presence : true"유효성 검사는 수치 적 유효성 검사가 실행되는 것을 중지하지 않습니다. 나는 당신이 필요하다고 생각합니다 : => Proc 타입 조건을 수치 검증에 쓰지 만, 구문을 알지 못합니다. –

답변

7

age_max의 값에 따라, 그리고 고정 된 값 age_min 아이디에 대한 numericality 확인, 난 당신이 발동

validates :age_min, :age_max, :presence => true 
validates :age_min, :numericality => {greater_than: 0, less_than_or_equal_to: :age_max}, :unless => Proc.new {|user| user.age_min.nil? || user.age_max.nil? } 
+0

글쎄 지금까지 가장 깨끗한 방법 같습니다. 감사! –