2014-07-08 4 views
1

데이터베이스에 제약 조건이 적용되지 않는 한 여러 프로세스가있는 경우 레일스의 고유성 유효성 검사를 사용하는 것은 안전하지 않습니다 (내 경우 PostgreSQL 데이터베이스이므로 http://robots.thoughtbot.com/the-perils-of-uniqueness-validations 참조).유효성 검사에 조건이있는 경우 데이터베이스의 고유성 확인

필자의 경우 고유성 유효성 검사는 조건부입니다. 모델의 다른 특성이 true가되는 경우에만 적용해야합니다. 그래서

class Model < ActiveRecord::Base 
    validates_uniqueness_of :text, if: :is_published? 

    def is_published? 
    self.is_published 
    end 
end 

이 그래서 모델이 두 가지 속성이 있습니다 is_published (부울) 및 text (텍스트 속성). textModel 인 모든 모델에서 고유해야합니다 (is_published).

http://robots.thoughtbot.com/the-perils-of-uniqueness-validations에서 제안 된대로 고유 인덱스를 사용하면 is_published 값에 관계없이 제약 조건을 적용하기 때문에 너무 제한적입니다.

누구나 PostgreSQL 데이터베이스의 "조건부"색인을 알고 있습니까? 또는 이것을 고치는 다른 방법?

답변

관련 문제