Fra*_*ank 2 ruby ruby-on-rails
以前,我在rails应用程序中显示了一个简洁而优秀的方法来获取给定类别的所有祖先类别:
def ancestors
result = []
c = self
while c.parent
result.unshift(c.parent)
c = c.parent
end
result
end
Run Code Online (Sandbox Code Playgroud)
现在我想弄清楚如何获得给定类别(孩子,孩子的孩子等)的所有后代类别.我能得到的最接近的是以下,但我仍然有问题最终的结果数组搞砸了.顶级数组未关闭.我已经打了好几个小时,我不知道如何解决它.
def descendants
result = []
c = self
for child in c.children
result.push(child)
if(child.children.any?)
result.push(child.descendants)
end
end
result
end
Run Code Online (Sandbox Code Playgroud)
试试这个:
def descendants
children.map(&:descendants).flatten
end
def ancestors
[parent, parent.try(:ancestors)].compact.flatten
end
Run Code Online (Sandbox Code Playgroud)
手动树遍历具有性能影响.您应该考虑使用像祖先一样的宝石,它可以很好地完成树形表示.
编辑1
如果您正在使用awesome_nested_set
gem,请注意它在AR实例上有ancestors
和descendants
方法.您可以使用ruby对这些方法的结果进行排序(如果您处理的是小集<100).
category.descendants.sort_by(&:name)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2787 次 |
最近记录: |