The Rails 4 documentazione dice questo riguardo distruggere le richiamate sul modello unirsi per un rapporto has_many :through
:Perché la raccolta non = oggetti su has_many: tramite richiami di attivazione sul modello di join alla cancellazione dell'associazione?
collection=objects
sostituisce le collezioni di contenuti eliminando e l'aggiunta di oggetti a seconda dei casi. Se l'opzione: through è true, i callback nei formati join vengono attivati, ad eccezione dei callback, poiché la cancellazione è diretta.
Per fortuna è documentato almeno, ma voglio sapere perché diamine è così? Spero che ci sia un motivo tecnico perché altrimenti è solo pazzesco!
Nel mio caso ho avuto una relazione has_and_belongs_to_many
sul modello di tabelle join su un altro modello. I record su quella seconda tabella di join non verranno mai eliminati quando i record associati sulla prima tabella di join sono stati eliminati. Ho fatto ricorso a questo che si sente hacky, e devo ripetermi su ogni lato della :through
rapporto:
has_many :schools_templates, dependent: :destroy
has_many :templates, through: :schools_templates, before_remove: :remove_groups_school_templates
private
def remove_groups_school_templates(template)
schools_templates.where(template: template).first.groups.clear
end
C'è una convalida per 'garantire' unicità sul unire le tabelle record tra le due chiavi esterne, in modo che perché posso chiamare first
nella richiamata.
Grazie per la risposta :) Ho aggiornato la domanda per dimostrare che avevo già impostato il set di distruzione dipendente sull'associazione con il modello di join. Non sono sicuro del motivo per cui ho perso quella :) Suppongo che la mia tesi sia che la cancellazione non dovrebbe essere "diretta", dovrebbe innescare callback "destroy" sul modello di join. –