ruby-on-rails - 在 Ruby 中对嵌套/邻接模型进行排序的算法

标签 ruby-on-rails ruby algorithm tree hierarchy

我一直在努力寻找一种好的方法来完成这项工作,无论是在客户端使用 Javascript 还是在服务器端的最后一刻。这是一个 Rails 应用程序,但这是一个非常笼统的问题。我有一个分层模型,当前存储在嵌套集模型中。然后模型有:

parent_id, lft, and rgt

我想在一个选择语句中从数据库中提取所有模型,因此给我一个简单的模型列表,然后将它们即时排序为树状层次结构。我还没有找到一种不需要递归的干净方法。我确定有一个很好的算法可以解决这个问题。谢谢。

最佳答案

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

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

关于ruby-on-rails - 在 Ruby 中对嵌套/邻接模型进行排序的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230153/

相关文章:

c# datatable - 从数据表中有效地为每个主记录选择详细记录

ruby-on-rails - 设计:登录失败,如何调试?

ruby - 无法使用 Net::HTTP 在我的 ruby​​ 代码中发出 HTTP 删除请求

c++ - 获取UTF-8编码的std::string的实际长度?

ruby - 无法将 Fixnum 转换为 String(类型错误)

mysql - 在 ActiveRecord 模型的所有查询中更改 FROM

algorithm - Boyer-Moore 算法中的移位规则

ruby-on-rails - 延迟工作只是不工作

ruby-on-rails - 设计 - 如何显示用户的帖子

ruby-on-rails - 闪光[:notice] not working with the after_sign_out_path_for - (devise)