Destruye asociaciones después de la última has_many: se elimina a través de registro
-
12-09-2019 - |
Pregunta
Con una has_many
regular, existe la opción de :dependent => :destroy
eliminar las asociaciones cuando se elimina el registro padre. Con has_many :through
, puede haber otros padres asociados a los registros secundarios, por lo que no tiene :dependent => :destroy
efecto alguno.
¿Cómo se asegura registros secundarios se eliminan después de que son huérfanos de la última asociación HMT?
Solución
La solución que he encontrado parece ser una devolución de llamada after_destroy
, como este:
class Parent < ActiveRecord::Base
has_many :children, :through => :parentage
after_destroy :destroy_orphaned_children
private
def destroy_orphaned_children
children.each do |child|
child.destroy if child.parents.empty?
end
end
end
Otros consejos
En el modelo de unirse, utilice "belongs_to: modelo, dependiente:: destruir"
Por ejemplo, si quieres destruir un paciente una vez que su médico se destruye, y los pacientes médico has_many aunque citas
Class Appointment
belongs_to :doctor
belongs_to :patient, dependent: :destroy
Class Doctor
has_many :appointments, dependent: :destroy
has_many :patients, through: :appointments
Class Patient
has_many :appointments
has_many :doctors, through: :appointments
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow