我一直试图找到一种很好的方法,无论是在Javascript的客户端还是在服务器的最后一刻。这是一个Rails应用程序,但它是一个非常通用的问题。我有一个分层的模型,目前存储在嵌套集模型中。该模型然后:
parent_id, lft, and rgt
我想从数据库中提取一个select语句中的所有模型,因此给我一个平面的模型列表,然后将它们即时排序到树层次结构中。我没有找到一个干净的方法来做这个不需要递归。我确信那里有一个很好的算法。感谢。
答案 0 :(得分:0)
我不知道没有递归的算法。以为我会分享我的站点地图视图助手:
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