dipendente => distruggere su una “has_many attraverso” associazione
-
22-09-2019 - |
Domanda
A quanto pare dipende => distruggere viene ignorato quando anche utilizzando il:. Attraverso l'opzione
Così ho questo ...
class Comment < ActiveRecord::Base
has_many :comment_users, :dependent => :destroy
has_many :users, :through => :comment_users
...
end
... ma l'eliminazione di un commento non si traduce in registrazioni comment_user associati ottenere cancellato.
Qual è l'approccio consigliato, quindi, per la cascata elimina quando si utilizza: attraverso
?Grazie
Soluzione
A quanto pare:! Dipendente non viene ignorato
Il vero problema era che mi stava chiamando Comment.delete(id)
che va dritto al db, mentre ora io uso Comment.destroy(id)
che carica l'oggetto commento e chiamate destroy () su di esso. Questo prende il :dependent => :destroy
e tutto va bene.
Altri suggerimenti
La soluzione del manifesto originale è valida, ma ho voluto sottolineare che questo funziona solo se si dispone di una colonna ID per quella tabella. Io preferisco i miei molti-a-molti tavoli per essere solo due chiavi esterne, ma ho dovuto rimuovere il mio "ID: true" dalla definizione della tabella di migrazione per eliminare cascata al lavoro. Avendo questa funzionalità sicuramente supera non avere una colonna ID nella tabella.
Se si dispone di un'associazione polimorfica, si dovrebbe fare quello @blogofsongs detto, ma con un attributo foreign_key in questo modo:
class User < ActiveRecord::Base
has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end