:throughオプションも使用している場合、明らかに依存=> destroyは無視されます。
だから私はこれを持っています...
class Comment < ActiveRecord::Base
has_many :comment_users, :dependent => :destroy
has_many :users, :through => :comment_users
...
end
...ただし、コメントを削除しても、関連するcomment_userレコードは削除されません。
:throughを使用する場合のカスケード削除の推奨アプローチは何ですか?
ありがとう
どうやら:dependentは無視されません!
本当の問題は、dbに直接移動するComment.delete(id)
を呼び出していたのに対して、Commentオブジェクトをロードしてdestroy()を呼び出すComment.destroy(id)
を使用することです。これにより、:dependent => :destroy
そしてすべてが順調です。
元のポスターのソリューションは有効ですが、このテーブルにid列がある場合にのみ機能することを指摘したかったのです。多対多のテーブルは2つの外部キーのみにすることを好みますが、カスケード削除を機能させるには、移行テーブル定義から「id:false」を削除する必要がありました。この機能を持つことは、テーブルにid列を持たないことよりも確実に重要です。
多態的な関連付けがある場合、@ blogofsongsが言ったことを行う必要がありますが、次のようなforeign_key属性を使用します。
class User < ActiveRecord::Base
has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end