在Rails中如何重新設定counter_cache的值?
Rails中有一個counter_cache
可以用,這東西的用途就是破壞正規化的(XD) …
一般來說,當我們要計算關連的資料有幾筆的話,我們會用 SELECT COUNT(id) FROM
commentsWHERE
post_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)
如何?很簡單吧?