如何在嵌套销毁中检测它

时间:2013-04-24 09:09:53

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个嵌套模型:列表可以有很多子列表。 (顺便说一下,我使用了Ancestry)

我有一条规则,当我删除一个列表时,如果它是父项的唯一子项(没有其他兄弟),它将取消。

然而,这现在阻止我删除父列表。例如:

L1
 |-L2
 |-L3
    |-L4

我无法删除L3,因为删除它会删除L4,但L4是单个孩子。

执行此删除的最佳方法是什么?是否有状态表明我目前处于嵌套销毁调用中?

我有一个压倒一切的破坏方法:

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

1 个答案:

答案 0 :(得分: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