2013-04-24 36 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