데이터베이스에 제약 조건이 적용되지 않는 한 여러 프로세스가있는 경우 레일스의 고유성 유효성 검사를 사용하는 것은 안전하지 않습니다 (내 경우 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
(텍스트 속성). text
은 Model
인 모든 모델에서 고유해야합니다 (is_published
).
http://robots.thoughtbot.com/the-perils-of-uniqueness-validations에서 제안 된대로 고유 인덱스를 사용하면 is_published
값에 관계없이 제약 조건을 적용하기 때문에 너무 제한적입니다.
누구나 PostgreSQL 데이터베이스의 "조건부"색인을 알고 있습니까? 또는 이것을 고치는 다른 방법?
도 참조'레일 문서에 add_index' : http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_index –