2

この方法で関連付けを設定しました。

class Program
  has_many :program_activities, dependent: :destroy
  has_many :recent_activities, through: :program_activities, source: :recent_activity
end

class RecentActivity
  has_many :program_activities, dependent: :destroy        
end

プログラム オブジェクトに関連付けられている recent_activities を削除したかったのです。

program.recent_activities.destroy_all

しかし、上記のクエリは実際には program_activities を削除するだけで (destroy ではなく削除することに注意してください)、recent_activities オブジェクトはそのままにしておきます。

これは、Rails コンソール クエリを調べることで見つかりました。destroy_all メソッドに何か問題がありますか、または実際に関連付けを正しく設定していませんか。

4

3 に答える 3

0

私には何も悪いことはありません。多対多の関係では正常です。

arecent_activityが one and only one に関連していた場合、関係モデルprogramはありません。program_activitiesRecentActivity に a を指定するだけでbelongs_to :program、削除が機能します。

あなたの場合、 a にrecent_activityは多くの がある可能性があると考えますprograms。したがって、エンティティを削除してもエンティティprogramを削除することはできませんrecent_activity。定義により、エンティティは複数のプログラムに属する可能性があるためです。関係を削除するだけです。

于 2013-09-23T20:05:04.517 に答える