【发布时间】:2013-12-28 14:45:03
【问题描述】:
我在 rails 中有以下模型:
class Model < ActiveRecord::Base
# id — integer
# name — string
# model_id — integer
belongs_to :parent, class_name: 'Model', foreign_key: 'model_id'
has_many :children, class_name: 'Model', foreign_key: 'model_id'
end
我正在使用邻接结构,它可以有无限的深度。我在使用递归选择的 Postgres 数据库中。
获取对象的嵌套散列最明智的方法是什么?我尝试选择 Model 的实例并对其进行排序,但无法将其带到任何可用的结果。
假设我的数据库中保存了四个 Model 实例:Model_1、Model_2、Model_3 和 Model_4。 Model_3 是 Model_2 的孩子,Model_4 是 Model_3 的孩子。
这是我想要实现的输出(Model 实例的嵌套哈希):
{
#<Model_1...> => {},
#<Model_2...> => {
#<Model_3...> => {
#<Model_4...> => {}
}
}
}
有什么想法吗?
更新: 树已经恢复——可以是 CollectionProxy、Relation 或任何其他数组式数据结构。我不想将该树排序为嵌套散列的散列。
【问题讨论】:
-
省去一些麻烦并使用祖先宝石。
-
MPP 在这种情况下不是一个选项——我需要无限深度和廉价的读/写(所以闭包表和嵌套树也不是一个选项)。
-
你想做什么?在尽可能少的查询中恢复元素树?每次加载父项时,您是要使用所有子项,还是使用延迟加载更好?
-
可以说树已经恢复了——可以是 CollectionProxy、Relation 或任何其他数组式数据结构。我不想将该树排序为嵌套哈希的哈希。
-
你使用的是什么数据库?
标签: ruby-on-rails ruby nested-lists adjacency-list