Apparemment dépendant => destroy est ignoré lorsque vous utilisez également l'option: through.
J'ai donc ça ...
class Comment < ActiveRecord::Base
has_many :comment_users, :dependent => :destroy
has_many :users, :through => :comment_users
...
end
... mais la suppression d'un commentaire n'entraîne pas la suppression des enregistrements comment_user associés.
Quelle est donc l'approche recommandée pour les suppressions en cascade lors de l'utilisation de: through?
Merci
Apparemment: la dépendance n'est pas ignorée!
Le vrai problème était que j'appelais Comment.delete(id)
qui va directement à la base de données, alors que j'utilise maintenant Comment.destroy(id)
qui charge l'objet Comment et appelle destroy () dessus. Cela ramasse le :dependent => :destroy
et tout va bien.
La solution de l'affiche originale est valide, mais je voulais souligner que cela ne fonctionne que si vous avez une colonne id pour cette table. Je préfère que mes tables plusieurs-à-plusieurs ne soient que les deux clés étrangères, mais j'ai dû supprimer mon "id: false" de la définition de la table de migration pour que la suppression en cascade fonctionne. Avoir cette fonctionnalité l'emporte définitivement sur le fait de ne pas avoir de colonne id sur la table.
Si vous avez une association polymorphe, vous devriez faire ce que @blogofsongs a dit mais avec un attribut foreign_key comme ceci:
class User < ActiveRecord::Base
has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end