我有一个名为Node
的简单模型,其字段为parent_id
。基本思想是,根Node
具有parent_id == nil
,然后其他Nodes
使用parent_id
来引用其父节点Node
。然后我想像这样遍历节点(深度优先):
def traverse(node)
node.children.each do |child_node|
traverse(child_node)
end
end
我唯一要避免的事情是对数据库进行多次调用以获取我的模型。我可以在一个查询中获得这样的层次结构吗?如果是,那怎么办?
我知道我可以使用诸如Node.all
之类的查询来完成此任务,然后编写一个构建整个层次结构的代码,但是我认为这不是最佳实践。我宁愿使用Node.where(parent_id: nil).includes(children)
之类的东西来仅将根与引用一起获得,但我不确定正税。