Rails:counter_cacheがafter_updateコールバックをトリガーしていません
-
29-10-2019 - |
質問
つまり、FolderモデルとFolderItemモデルがあります。
更新 ジェネラコディセタグプレ
counter_cacheを使用して、1つのフォルダーのイテン数を保持しています。ただし、フォルダが別のフォルダの親である可能性があるため、親フォルダに、そのすべての子のcounter_cacheとそれ自体のcounter_cacheの合計を持たせたいと思いました。
これを行うために、counter_cache列に加えられた変更をキャッシュするafter_updateメソッドを配置しようとしましたが、新しいFolderItemが作成されたときにこのメソッドが呼び出されません。
解決
私はこのようなことをします。
フォルダテーブルにいくつかのキャッシュカウンタフィールドを追加します ジェネラコディセタグプレ
そしてRubyコード ジェネラコディセタグプレ
Folder#sum_of_children
-methodは再帰的であるため、大きなデータセットの場合、アプリケーションの速度が低下する可能性があることに注意してください。SQLマジックをもう少しやりたいと思うかもしれませんが、純粋なRubyとして、これは私が得ることができる限り良い解決策に近いものです。私はあなたがそれを逆にしたのを見ました、それはあなたがボトムアップから更新する必要があるのと同じくらい遅いでしょう。(これはトップダウンです)
それがあなたが探しているものかどうかはわかりませんが、フォルダ内のアイテムの数をキャッシュするための読みやすいソリューションです。
所属していません StackOverflow