rails 祖先得到所有最后 children 的根

rails ancestry get the all last children by the root

我在文件夹 class

中有此记录
Folder 1 = parent id: root
  sub folder 1 = parent id: Folder 1
    secret file1 = parent id: Folder 1/sub folder 1
      my folder1 = parent id: Folder 1/ sub folder 1/ secret file1

Folder 2
 sub folder 2 = parent id: Folder 2
  secret file2 = parent id: Folder 2/sub folder 2
   my folder2 = parent id: Folder 2/ sub folder 2/ secret file2

现在我的 html

里有了这个
- folder.indirects.each do |sub|
   div.col
    div.form-group
     = sub.name

我变得像这样

secret file1

my folder1

secret file2

my folder2

但我的目标是获得 "my folder1" 和 "my folder2"

- folder.indirects.each do |sub|
  - if sub.children.blank?
    div.col
      div.form-group
       = sub.name

我使用 if 这样我就可以删除其他文件夹

所以你基本上想要获取所有叶节点,对吧?

您可以通过遍历所有后代并拒绝带有子节点的节点来实现。它可能不是最高效的解决方案,但它会起作用。

 - folder.descendants.reject(&:has_children?).each do |sub|
   div.col
    div.form-group
     = sub.name

顺便说一句,对于 level = 2 的树,使用 indirects 方法是错误的,因为在这种情况下你会拒绝根的直接子代,在这种情况下它们也是叶子。