我有一个嵌套模型:列表可以有很多子列表。 (顺便说一下,我使用了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 :(得分: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