赫謙小便籤

在Rails中如何重新設定counter_cache的值?

Rails中有一個counter_cache可以用,這東西的用途就是破壞正規化的(XD) …

一般來說,當我們要計算關連的資料有幾筆的話,我們會用 SELECT COUNT(id) FROMcommentsWHEREpost_id= 1 這種方式來計算,可是如果當request 量一大且資料量也大的時候這樣子其實超級麻煩的,所以可以透過counter_cache來直接cache住關連的資料筆數。

但是有時候可能因為某些原因導致沒有正確記錄到cache值,這時候我們就可以用reset_counters來自動重新整理這些值 …

也許你會覺得奇怪,為什麼不要直接把值寫入comments_count這種欄位內就好呢?那是因為 …. 這個值是readonly的囧!

為了保護欄位值的正確只好這樣做,所以我們只好用reset_counters來處理這個部分了。

使用的方式是 Model.reset_counters(id, association_name)

若以上面的例子來說的話,就是 Post.reset_counters(1, :comments)

如何?很簡單吧?

Comments