'parent_id' def descendents chil-6ren">
gpt4 book ai didi

ruby-on-rails - 从 rails 自引用关联生成嵌套层次结构响应

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:39 25 4
gpt4 key购买 nike

我有一个 self 参照模型,

class Hierarchy < ActiveRecord::Base
has_many :children, :class_name => "Hierarchy", :foreign_key => 'parent_id'

def descendents
children.map do |child|
[child] + child.descendents
end
end
end

如何从这样的模型“层次结构”构建层次结构树,

{
"hierarchies": [
{
"level": 1, "id": 14951, "name": "EQUIPMENT", "parent_id": null,
"children": [
{
"level": 2, "id": 15040, "name": "BASKETBALL", "parent_id": 14951,
"children": [
{
"level": 3, "id": 15154, "name": "EYEWEAR", "parent_id": 15040,
"children": [
{
"level": 4, "id": 16617, "name": "OPHTHALMIC", "parent_id": 15154,
"children": []
}
]
},
{
"level": 3, "id": 16417, "name": "OTHER", "parent_id": 15040, "children": []
}
]
}
]
}
]
}

“Herarchy”模型的descendents 方法可以从Herarchy 模型迭代和检索数据,直到最后一层。

例子:

  render :json => { :hierarchies => [root_hierarchy, root_hierarchy.descendents]}

它返回所有级别,

{
"hierarchies": [
{
"level": 1, "id": 14951, "name": "EQUIPMENT", "parent_id": null
},
[
[
{
"level": 2, "id": 15040, "name": "BASKETBALL", "parent_id": 14951
},
[
{
"level": 3, "id": 15154, "name": "EYEWEAR", "parent_id": 15040
},
[
{
"level": 4, "id": 16617, "name": "OPHTHALMIC", "parent_id": 15154
}
]
],
[
{
"level": 3, "id": 16417, "name": "OTHER", "parent_id": 15040
}
]
]
]
]
}

问题是我无法在每次迭代中附加其关联的子项。我尝试了 as_jsonincludes 方法将子项附加到其父对象中,但没有成功。

最佳答案

我以前遇到过同样的问题。我建议你看看 closure_tree .它添加了一些非常有用的方法来操作分层数据。它有一种只需要 1 个 SELECT 查询就可以获取后代的方法。您当前使用邻接列表的实现很简单,但它需要对每个后代进行一次查询,并且很快就会变得低效。

关于ruby-on-rails - 从 rails 自引用关联生成嵌套层次结构响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29822285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com