現在、何千ものレコードが親子関係でリンクされている 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