1

Rails アプリで「acts_as_nested_set」を使用しています。(すばらしいネストされたセット プラグインで拡張)。要素とそのネストされたセット全体を複製する関数/メソッドを作成して、各要素が複製されますが、新しい要素だけで関係構造が元の構造を模倣するようにする最善の方法を論理的に考えようとしていました。

ネストされたセットを使用すると、parent_id, lft, and rgt位置列が得られます... position_id.

各セットの最下部 (子のないノード) から開始し、親を介して新しいルートまでクローンを作成する必要がありますか?

これは、すでに行われたか、ネストされたセットに対してすでにこれを行う方法があるようですが、私を導くものを見つけることができません。

ありがとう

4

1 に答える 1

2

私はacts-as-treeでこのようなことをしました。集合セットを繰り返し処理し、各アイテムを複製しました。ソース アイテムとクローン アイテムを、ソースがキーでクローンがターゲットであるハッシュに保存しました。次に、ハッシュを親参照とともに使用して、リレーションを解決および再マップしました。

要点を伝えるのに役立つスニペットを次に示します。

clone メソッドは、ID なしで新しいコピーをインスタンス化するだけです。子孫メソッドは、直接の子孫だけでなく、子孫の完全なリストを返します。

def clone_branch()
  h = {self => self.clone} #we start at the root

  ordered = self.descendants #preserved order with acts_as_sortable

  #clone subitems
  ordered.each do |item|
    h[item] = item.clone
  end

  #resolve relations
  ordered.each do |item|
    cloned = h[item]
    item_parent = h[item.parent]
    item_parent.children << cloned if item_parent
  end

  h[self]
end
于 2009-09-29T19:07:59.877 に答える