Есть ли способ узнать, происходит ли «разрушение», вызываемое для модели, из «зависимого» отношения в Rails? - PullRequest
1 голос
/ 17 апреля 2019

Для данной Модели продукта, которая имеет много Цветов

class Product < ApplicationRecord
    has_many :colors, dependent: :destroy
end

и Модель Цвета, которая принадлежит Продукту, с after_destroy, которые уничтожают продукт, если у него больше нет цветов.

class Color < ApplicationRecord
  belongs_to :product

  after_destroy do |color|
    product = color.product
    product.destroy! if product.colors.count.zero?
  end
end

Когда я уничтожаю Цвет или даже все Цвета, все работает хорошо.Но когда я пытаюсь уничтожить Продукт, он поднимает: ActiveRecord::RecordNotDestroyed (Failed to destroy the record)

в этой строке внутри Цветовой модели: product.destroy! if product.colors.count.zero?

После небольшого теста я думаю, что это связано с этим циклом.уничтожить, что он создан между продуктом и цветами.Есть ли способ определить, уничтожается ли объект Color зависимостью has_many или нет?

1 Ответ

0 голосов
/ 17 апреля 2019

Для ассоциаций определены 4 обратных вызова (before_add, after_add, before_remove и after_remove). Вы, вероятно, хотите after_remove:

class Product < ApplicationRecord
  has_many :colors, dependent: :destroy, after_remove: :cleanup_product

  def cleanup_product(color)
    color.product.destroy if color.product.colors.empty?
  end
end
...