2014-10-24 2 views
2

'term'및 'section'속성이있는 레일 모델이 있습니다. 나는 이러한 속성에 대한 고유성 제약 조건을 원하는, 그래서 나는이 시도 : 모두 '용어'와 '범위'전무되지 않은 경우레일 값에 대한 고유성 유효성 검사

validates_uniqueness_of :term, scope: :section 

이 만 작동합니다,하지만 난 여전히있을 때 적용 할 제약 조건을 원하는 nil 값. ActiveRecord :: Validations docs을 보면, 'allow_nil'을 false로 설정하면 값이 nil 일 때 유효성 검사를 건너 뛰지 않습니다. 그러나이 옵션의 기본값은 이미 거짓입니다.

어쨌든 allow_nil을 false와 true로 설정해 보았지만 아무런 변화가 없었습니다. 아무도 왜 nil 값이있을 때 작동 확인을 얻을 수 없다는 것을 알고 있습니까?

+0

': scope'을': section'으로 설정하는 목적은 무엇입니까? – Alireza

+1

@Ali'term'은'section'과 같은 값을 가진 모든 레코드에서 유일해야합니다. –

+0

@ user2745175 레일을 업데이트하거나 사용하는 버전을 지정하십시오. 레일즈 업데이트가 도움이되지 않으면 DB 버전이 유용 할 수도 있습니다. 방금 레일 4.1.6 및 PG 9.1을 사용하여 테스트 한 결과 예상대로 작동합니다. –

답변

0

당신은

validates_presence_of :term, :section 
+0

어떻게 nil 값을 허용합니까? –

+0

그는'allow_nil'을 false로 설정하여 예상대로 작동하지 않으므로 원하는 효과를 얻을 것이라고 생각했습니다. 어떻게 그 질문을 이해 했습니까? –

+0

이것은 내가 원하는 것이 아닙니다. 고유 한 제약 조건을 용어와 섹션의 조합에 적용하고자합니다. 개별적으로 개별적으로 제한하고 싶지는 않아. 편집 : 오 제안을 잘못 읽었습니다. 나는 섹션의 존재를 강요 할 수 없다. 그것은 없어야합니다. – user2745175

0

"나는. 나는 개별적으로에 고유 제한 조건을 원하지 않는 고유 제한 조건이 용어 및 섹션의 조합에가되고 싶어요."추가 할 수 있습니다

크로스 필드 유효성 검사입니다. validates_with를 사용하여 사용자 정의 유효성 검사기를 작성해야합니다. Read about that here.

+0

validates_uniqueness_of이 기능을 명시 적으로 지원합니다. 사용자 정의 유효성 검사기가 필요하지 않습니다. – Corbin

+0

그는 유일성 제약 조건에 포함되지 않는 nil 값을 원합니다. –

+0

": allow_nil - true로 설정된 경우 속성이 nil이면이 유효성 검사를 건너 뜁니다 (기본값은 false 임)." 나에게 어떤 null 컬럼 값이든 그것이 무시되거나 고유성 제약 조건과 관련하여 무시되지 않는 것처럼 들린다. 내가 잘못 읽은 것 같아? 대신 주 특성 (범위에없는 특성)이 nil이면 유효성 검사를 건너 뛰는 것을 의미합니까? 그렇다면 매우 유용한 행동이 아니기 때문에 다소 놀랍습니다. – Corbin

관련 문제