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