2012-05-13 4 views
1

다음 구문을 사용하면 유효성 검사에 문제가 있습니다. 오류가 없습니다.레일 유효성 검사 및 사용자 정의 오류 메시지

validates :title, uniqueness: true 

그러나이 코드로 변경하면 오류가 발생합니다. 여기

validates :title, uniqueness: {message: 'Title must be unique'} 

은 완전성에 대한 테스트입니다 :

test "product is not valid without a unique title " do 
    product = Product.new(title: products(:ruby).title, 
    description: "yyy", 
    price: 1, 
    image_url: "fred.gif") 

    assert !product.save 
    assert_equal "has already been taken", product.errors['title'].join('; ') 
end 

나는 루비 제품의 책 제목을 추가하는 고정 등

내가 알고있는 것처럼 두 검증은을해야 한 같은, 그냥 하나의 사용자 정의 오류 메시지를 제공합니다. 이것은 사용자 정의 메시지를 사용할 때 발생하는 오류입니다.

1) 실패 : test_product_is_not_valid_without_a_unique_title_ <는 "이미 촬영되었습니다"(ProductTest)> 예상하지만 <는 "제목은 고유해야합니다"였다>.

미리 도움을 주셔서 감사합니다. 여기

답변

1

:

당신이 오류 해시에서 "이미 촬영되었습니다",하지만 당신은 사용자 정의 메시지와 함께이 메시지를 무시했습니다 볼 것으로 예상
assert_equal "has already been taken", product.errors['title'].join('; ') 

. 테스트 결과 사용자 지정 메시지가 제대로 표시됩니다. 왜 여전히 기본 메시지를 기대합니까? Title must be unique을 기대해야합니다.

사용자 지정 메시지에서 필드 이름을 제공하지 마십시오. 예를 들어, product.errors.full_messages ("고유해야 함"으로 충분할 것입니다.)으로 오류를 생성 할 때 Rails는 자동으로 오류를 처리합니다.

+0

사용자 지정 메시지를 볼 것으로 예상되지는 않지만 중복 제목을 삽입하지 않으면 메시지가 전혀 들리지 않습니다. 필드 이름을 넣지 말고 팁 주셔서 감사합니다;) – Lee

+0

테스트 DB가 이미 조명기로 채워져 있지 않습니까? 기존 타이틀이있는 레코드를 만드는 것처럼 보입니다. – jdoe

+0

예, 그렇지만 맞춤 메시지를 사용하는 경우와 상관없이 오류가 발생하지는 않습니다. validates : title, uniqueness : 테스트를 실행할 때 true가 계속 실패를 유발해야합니다. Fixture가 DB에 테스트 데이터를로드 할 것이므로 validates 절이 실패를 트리거해야합니다. 내가 놓친 게 아니라면? – Lee

관련 문제