Удалить осиротевшего родителя

У меня есть такие отношения:

Parent
  has_many :children

Child
  belongs_to :parent

Я хочу удалить родителя, если больше не осталось детей. Итак, для этого у меня есть:

Child
    before_destroy :destroy_orphaned_parent

    def destroy_orphaned_parent
      parent.children.each do |c|
        return if c != self
      end
      parent.destroy
    end

Это работает нормально, однако я также хочу каскадно удалить родительский элемент для дочернего. Например, обычно я бы сделал:

Parent
  has_many :children, :dependent => :destroy

Это вызывает сбой сервера WebRick, когда я его тестирую. Я предполагаю, что это происходит из-за бесконечного цикла, когда последний дочерний элемент удаляет родительский элемент, удаляет дочерний элемент и т. Д.

Я начинаю думать, что есть лучший способ сделать это? У кого-нибудь есть идеи? Есть ли способ предотвратить эту рекурсию?

11
задан ghempton 3 May 2011 в 07:22
поделиться