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?

Foi útil?

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
scroll top