使用一个ActiveRecord调用获取Rails中的对象层次结构

时间:2019-06-23 17:43:28

标签: ruby-on-rails activerecord

我有一个名为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)之类的东西来仅将根与引用一起获得,但我不确定正税。

0 个答案:

没有答案