2013-10-21 2 views
2

내 응용 프로그램에 조상 트리가 있습니다.레일은 수준에서 고유성을 확인합니다.

동일한 수준의 레코드에 대해서만 고유성을 구현하고 싶습니다.

#<Folder id: 1, title: "folder1", ... ancestry: nil>, 
#<Folder id: 2, title: "folder2", ... ancestry: "1">, 
#<Folder id: 3, title: "folder3", ... ancestry: "1/2"> 

내가이 오류 title is olready taken를 제기한다 folder (:title => 'folder2', :ancestry => '1'),

을 만들려면하지만 난 folder (:title => 'folder2', :ancestry => nil or "1/2")을 만들 경우 새로운 기록을 작성해야합니다 :

기록을 설명 할 수 있습니다.

아마 누군가가이 문제를 가지고 있고, 조언을 제공하거나

고유성 검증이 scope 매개 변수를 받아 들일 수

답변

6

(조상 방법 @의 elem.siblings에서이 @elem 수준에있는 모든 레코드를 반환)에 응답 할 수 있습니다 :

validates_uniqueness_of :title, :scope => :ancestry 

이제 동일한 가계 값을 가진 레코드 중에서 해당 제목의 유효성을 검사하게됩니다.