【问题标题】:rails ancestry get the all last children by the rootrails ancestry 从根上获取所有最后的孩子
【发布时间】:2020-01-16 07:54:24
【问题描述】:

我在文件夹类中有这条记录

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

我越来越喜欢这个了

秘密文件1

我的文件夹1

秘密文件2

我的文件夹2

但我的目标是获得“我的文件夹1”和“我的文件夹2”

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-5 ancestry


    【解决方案1】:

    所以你基本上是想得到所有的叶子节点,对吧?

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

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

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

    【讨论】:

    • 我不知道为什么我的答案被某人删除了,但我已经解决了这个问题
    • 不接受您的代码更干净,更有效,谢谢
    【解决方案2】:
    - folder.indirects.each do |sub|
      - if sub.children.blank?
        div.col
          div.form-group
           = sub.name
    

    如果这样我可以删除另一个文件夹

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 2021-08-19
      • 2018-01-29
      • 2017-04-22
      • 1970-01-01
      • 2018-10-27
      相关资源
      最近更新 更多