如何仅获得节点的前三个孩子?祖先轨道4



我有祖先的模特'人',我正在创建家谱。在这种情况下,我正在尝试获得节点的前三个级别,例如:

从父亲(第一级)开始,我只想让他们所有的孩子(第二级)及其所有孙子(第三级)。但是我不想获得他们的曾孙(第四级)。

现在,如果我们从一个儿子之一开始(第一级),我想让您的孩子(第二级)和那个儿子的孙子(第三级)。

这是我拥有的代码,但是在此之后,它获得了一个节点的所有级别:

def self.get_tree_json(user)
  json_hash = Hash.new
  if user.has_children?
   array_children = Array.new
   user.children.each do |child| # This function get all children
     array_children << get_tree_json(child)
    end
   json_hash["children"] = array_children
  end
  return json_hash
end

您可以启用深度缓存,然后使用tre_depth(?)或subtree(to_depth:?)选项。从祖先文档中:

cache_depth           Cache the depth of each node in the 'ancestry_depth' column (default: false)
before_depth(depth)     Return nodes that are less deep than depth (node.depth < depth)
node.subtree(:to_depth => 2)      Subtree of node, to a depth of node.depth + 2 (self, children and grandchildren)

最新更新