2013-04-24 40 views
0

我有一个嵌套模型:一个列表可以有许多子列表。 (我顺便用过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 
+0

但是'L3'不父母的唯一孩子('L1'),所以我想我不明白你想要做什么。 – gmaliar 2013-04-24 09:21:34

+0

@Guy L3不是唯一的孩子,因此它应该是可删除的。但是L4阻止L3被正确删除。 – lulalala 2013-04-24 09:23:34

+0

你能展示一些代码吗? – gmaliar 2013-04-24 09:25:22

回答

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