0

ネストされたモデルがあります: リストには多くのサブリストを含めることができます。(ちなみにAncestryを使用しました)

リストを削除すると、それが親の唯一の子である場合 (他の兄弟がいない場合) はキャンセルされるというルールがあります。

ただし、これにより、親リストを削除できなくなりました。例えば:

L1
 |-L2
 |-L3
    |-L4

L3 を削除すると L4 が削除されるため、L3 を削除することはできませんが、L4 は単一の子です。

この削除を行う最善の方法は何ですか? 現在、ネストされた破棄呼び出しにいることを示すステータスはありますか?

オーバーライドする destroy メソッドがあります。

  def destroy
    if siblings.count == 1
      errors.add(:base,'Cannot delete List because it is the only child')
      return false
    else
      super
    end
  end
4

1 に答える 1

0

メソッド コール スタック トレースを追跡する手法を使用して、ネストされた呼び出しにいるかどうかを確認しました。

  def destroy
    if siblings.count == 1 && !nested_destroy_call?
      errors.add(:base,'Cannot delete List because it is the only child')
      return false
    else
      super
    end
  end
  def nested_destroy_call?
    caller.count{|call| call.start_with?( __FILE__) && call.include?(':in `destroy')} > 1
  end
于 2013-04-25T02:19:15.290 に答える