54

:through オプションも使用すると、どうやら依存 => 破棄は無視されます。

だから私はこれを持っています...

class Comment < ActiveRecord::Base
  has_many :comment_users, :dependent => :destroy
  has_many :users, :through => :comment_users
  ...
end

...しかし、コメントを削除しても、関連する comment_user レコードは削除されません。

では、:through を使用する場合のカスケード削除の推奨されるアプローチは何ですか?

ありがとう

4

3 に答える 3

101

どうやら :dependent は無視されません!

本当の問題はComment.delete(id)、db に直接アクセスする呼び出しを行っていたのに対し、現在Comment.destroy(id)は Comment オブジェクトをロードして destroy() を呼び出す呼び出しを使用していたことです。これで問題が解決し、:dependent => :destroyすべて問題ありません。

于 2009-09-09T13:28:33.377 に答える
12

元のポスターの解決策は有効ですが、これはそのテーブルに id 列がある場合にのみ機能することを指摘したいと思います。多対多テーブルを 2 つの外部キーのみにすることを好みますが、カスケード削除を機能させるには、移行テーブル定義から "id: false" を削除する必要がありました。この機能を持つことは、テーブルに id 列がないことよりも重要です。

于 2013-04-27T16:59:23.727 に答える
7

ポリモーフィックな関連付けがある場合は、@blogofsongs が言ったことを実行する必要がありますが、foreign_key 属性を次のように使用します。

class User < ActiveRecord::Base
  has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end
于 2014-06-12T10:19:19.740 に答える