我在rails项目中有一个“groups”表。每个组都可以有一个父组,其中group_id引用它自己的表。
我有这个代码来遍历行并使用代数组装一个数组,这是有效的,但我认为必须有一个更有效的方法来实现这一点,使用更少的代码行,或者只有一个ActiveRecord查找,或者只是一般的简单...任何想法?
class GroupsController < ApplicationController
def index
root_groups = Group.where 'group_id is null'
@child_groups = Group.where 'group_id is not null'
@groups = []
root_groups.each do |group|
@groups << [group, 0]
find_children group, 1
end
end
private
def find_children (group, generation)
@child_groups.each do |child|
if child.group == group
@groups << [child, generation]
find_children child, generation+1
end
end
end
end
答案 0 :(得分:0)
我有similar situation a few years ago并使用连接表来管理关系。但是,我也在我的自引用方法中使用了collect,这表明你应该能够这样做:
def find_children(group, generation)
group.collect{|g| [[g, generation] << find_children(g, generation+1)}.uniq
end
我还建议你将这个逻辑移到模型中。
答案 1 :(得分:0)
您还可以查看awesome_nested_set,它将为您完成大量此项工作