我有祖先的模特'人',我正在创建家谱。在这种情况下,我正在尝试获得节点的前三个级别,例如:
从父亲(第一级)开始,我只想让他们所有的孩子(第二级)及其所有孙子(第三级)。但是我不想获得他们的曾孙(第四级)。
现在,如果我们从一个儿子之一开始(第一级),我想让您的孩子(第二级)和那个儿子的孙子(第三级)。
这是我拥有的代码,但是在此之后,它获得了一个节点的所有级别:
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)