ActiveRecord::Base を継承する Commentable クラスと、Commentables を継承する Event クラスがあります。
これらのクラスの両方で destroy メソッドを上書きし、Event.distroy は super を呼び出します。ただし、いくつかの予期しないことが起こります。具体的には、イベントの has_and_belongs_to_many 関連付けが削除されます。Commentables と Event クラスの間にいくつかのモジュールが含まれているため、これが発生していると思いますが、これを止める方法があるかどうかはわかりません。
簡略化されたコードは次のとおりです。
class Commentable < ActiveRecord::Base
has_many :comments
def destroy
comments.destroy_all
self.deleted = true
self.save!
end
end
class Event < Commentable
has_and_belongs_to_many :practitioners, :foreign_key => "commentable_id"
def destroy
#some Event specific code
super
end
end
データベースから行を削除したくありません。「削除済み」フラグを設定するだけです。また、関連付けを削除したくありません。ただし、Event.destroy と Commentable.destroy の間のどこかで、他のいくつかのレール コードが has_and_belongs_to_many テーブルのレコードを破棄します。
なぜこれが起こっているのか、それを止める方法はありますか?