Rails:counter_cacheがafter_updateコールバックをトリガーしていません

StackOverflow https://stackoverflow.com/questions/9399408

  •  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として、これは私が得ることができる限り良い解決策に近いものです。私はあなたがそれを逆にしたのを見ました、それはあなたがボトムアップから更新する必要があるのと同じくらい遅いでしょう。(これはトップダウンです)

それがあなたが探しているものかどうかはわかりませんが、フォルダ内のアイテムの数をキャッシュするための読みやすいソリューションです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top