代码之家  ›  专栏  ›  技术社区  ›  jacortinas

Ruby中嵌套/邻接模型的排序算法

  •  2
  • jacortinas  · 技术社区  · 16 年前

    我一直在试图找到一个很好的方法来实现这一点,要么在Javascript的客户端,要么在服务器的最后一分钟。这是一个Rails应用程序,但它是一个非常普通的问题。我有一个分层的模型,当前存储在一个嵌套的集合模型中。然后,模型具有:

    parent_id, lft, and rgt
    

    我想在一个select语句中从数据库中取出所有模型,因此给我一个简单的模型列表,然后动态地将它们排序到树层次结构中。我还没有找到一个干净的方法来做这件事,不需要递归。我相信有一个很好的算法。谢谢。

    1 回复  |  直到 16 年前
        1
  •  0
  •   mikezter    16 年前

    我不知道没有递归的算法。我想无论如何都要分享我的站点地图视图助手:

    def tree_from_set(set, &node_text)
      buf = '<ul>'
      siblings = set.select{|n| n.parent_id == set[0].parent_id}
    
      siblings.each do |node|
        children = set.select{|n| n.lft > node.lft and n.rgt < node.rgt }
        buf << '<li>'
          if children.blank?
            buf << yield(node)
          else
            buf << yield(node)
            buf << tree_from_set(children, &node_text)
          end
        buf << '</li>'
      end
      buf << '</ul>'
    end
    
    推荐文章