Destrua as associações após o último Has_Many: através do registro é excluído
-
12-09-2019 - |
Pergunta
Com um regular has_many
, existe a opção de :dependent => :destroy
Para excluir as associações quando o registro dos pais for excluído. Com has_many :through
, pode haver outros pais associados aos registros da criança, então :dependent => :destroy
não tem nenhum efeito.
Como você garante que os registros infantis sejam excluídos depois de serem órfãos da última associação HMT?
Solução
A solução que encontrei parece ser um after_destroy
retorno de chamada, 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
Outras dicas
No modelo de junção, use "pertences_to: modelo, dependente :: destruir"
Por exemplo, se você deseja destruir um paciente assim que o médico for destruído, e o doutor Has_Many Pacedies, embora as consultas
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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow