我目前有一个 Rails 应用程序,它有数千条以父子关系链接的记录。
我想要以有效方式返回每条记录的所有后代或祖先的方法。我有一个递归地执行此操作的工作方法,但它当前填充了大量数组(最多 100k 条记录),然后将它们展平并删除重复项。有没有比我当前需要数小时才能运行所有记录的代码更有效的方法来实现这一点?我不认为 Ancestry 之类的 gem 适合,因为我没有严格的树形结构。
首先十分感谢。
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