私はたくさんの has_many :through リレーションをアプリに持っています。接続されたオブジェクトの数など、これに関連する情報を広範囲に表示しています。ユーザーがリレーションを更新するたびに、結合テーブルが変更され、これをスイーパーでキャッチできます。
問題は、結合テーブルのエントリが削除され、破棄されないことです。関係がなくなった場合、これを検出する正当な方法がなく、キャッシュから誤解を招く情報を表示しています。:touch => true や :counter_cache => true のようなものはすべて部分的に機能します。リレーションが更新または作成されると増加します。しかし、ユーザーがリレーションを削除しても何も起こりません。:counter_cache が壊れていて、:touch がトリガーされません。
ガベージ ソリューションは、メイン モデルが保存されるときに、コントローラーで .touch を呼び出すことです。この種の作品は、しかし、それは本当に非専門家のようです. これは、コントローラーではなく、モデル ロジックにある必要があります。
私は何か大きなものを見逃しているように感じますが、これについて頭を悩ませることはできません. 誰でもこの問題について洞察を得ることができますか?