我目前有一个轨道应用程序,有成千上万的父子关系链接的记录。ruby父母子女递归优化
我想方法,以有效的方式返回每个记录的所有后代或祖先。我有一个工作方法递归执行此操作,但它当前会填充大量的数组(最多10万条记录),然后将这些数据平滑并删除重复项。有没有比我当前的代码更有效的方法来实现这一点,它需要几小时才能运行所有记录?我不认为像祖先这样的宝石是合适的,因为我没有严格的树结构。
非常感谢。
class Record < ActiveRecord::Base
has_many :children, through: :reverse_relationships, source: :child
has_many :parents, through: :relationships, source: :parent
def all_children
children.map do |child|
[child] + child.all_children
end.flatten.uniq
end
def all_parents
parents.map do |parent|
[parent] + parent.all_parents
end.flatten.uniq
end
end
'通过:'看起来不像经典的父子层次结构,是否有一个原因(使递归更慢)? –
我在想这是建立自我指涉关系的适当方法。我的记录是一个时间表内的活动,每个活动链接到其他活动。如果有更好的方法,请让我知道吗? – Jimbo
伙计们,它看起来像嵌套集不是我所追求的,因为我的对象可以有多个父母。因此,如果任何人都可以提供一种简单的方法来提高我所拥有的代码的性能,那么将会非常感激。 – Jimbo