2014-05-09 2 views
4

부울 필드의 고유성을 확인하려고하는데 사실 일 때만 유효합니다.조건부로 부울 값의 유효성 검사

이 유효성 검사가 실행
validates_uniqueness_of :org_feed, if: :org_feed 

, 그것은 다음과 같은 SQL 생성 : 그것은 피드를 발견하면이 쿼리가 행을 반환

SELECT 1 AS one FROM `feeds` WHERE `feeds`.`org_feed` = BINARY 't' LIMIT 1 

을하지만 부울 org_feed 나는 내 모델에 정의 다음 한 0입니다. 이는 정확히 수행해야하는 것과 반대입니다. 필드가 부울이므로 BINARY 't'이 단지 true 일 것으로 예상됩니다. 따라서 쿼리가 다음과 같이 표시되어야합니다.

SELECT 1 AS one FROM `feeds` WHERE `feeds`.`org_feed` = true LIMIT 1 

어떻게 든 부울 필드인지 확인해야합니까?

답변

6

당신은 당신의 모델에 다음 코드를 사용할 수 있습니다

validates :org_feed, uniqueness: true, if: :org_feed_is_true? 

def org_feed_is_true? 
    org_feed == true 
end 

이에 대한 자세한 내용은 http://guides.rubyonrails.org/active_record_validations.html#using-a-symbol-with-if-and-unless에서보세요. 고유성 org_feed, : 유효성을 검사 : 왜 더 쉽게

+4

사실, 경우 : 수있는 방법이 필요 없음을 org_feed. – Nico

관련 문제