Перезвони

я такие отношения:

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 при тестировании. Я предполагаю, что это происходит из-за бесконечного цикла последнего потомка, удаляющего родителя, удаляющего потомка и т. Д.

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

Ответы на вопрос(5)

Ваш ответ на вопрос