2013-04-24 3 views
0

У меня есть вложенная модель: список может иметь много подписок. (Раньше я использовал Ancestry)Как обнаружить его во вложенном уничтожении

У меня есть правило, что когда я удалю список, он отменит, если он является единственным дочерним элементом родителя (не имеет других братьев и сестер).

Однако теперь это не позволяет мне удалить родительский список. Например:

L1 
|-L2 
|-L3 
    |-L4 

Я не могу удалить L3, так как удаление будут удалены L4, но 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 
+0

Но 'L3' не единственный ребенок родителя ('L1'), поэтому я думаю, что не понимаю, что вы пытаетесь сделать точно. – gmaliar

+0

@Guy L3 - не единственный ребенок, поэтому он должен быть удалён. Однако L4 препятствует правильному удалению L3. – lulalala

+0

Можете ли вы показать немного кода? – gmaliar

ответ

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 
Смежные вопросы