Rails在级别上验证唯一性

Myk*_*bak 2 ruby-on-rails ancestry

我的应用程序中有祖先树.

我想仅在同一级别上实现记录的唯一性.

让我解释

记录:

 #<Folder id: 1, title: "folder1", ... ancestry: nil>,
 #<Folder id: 2, title: "folder2", ... ancestry: "1">,
 #<Folder id: 3, title: "folder3", ... ancestry: "1/2">
Run Code Online (Sandbox Code Playgroud)

如果我想创建folder (:title => 'folder2', :ancestry => '1')它应该引发错误title is olready taken,

但如果我创建 folder (:title => 'folder2', :ancestry => nil or "1/2")它应该创建新的记录.

可能有人有这个问题,可以给出建议或答案

(在祖先方法中@ elem.siblings返回@elem级别的所有记录)

Mat*_*att 6

唯一性验证器可以接受scope参数:

validates_uniqueness_of :title, :scope => :ancestry
Run Code Online (Sandbox Code Playgroud)

它现在将验证该标题在具有相同祖先值的记录中是唯一的.