這是一個棘手的問題。Rails 3:只有在發佈時更新counter_cache
我有一個具有多種內容類型的項目,比如文章,評論等。每個內容類型都有評論,評論是多態的,因爲他們可以屬於任何內容類型。
我想在我的所有內容頁面上放置一個總評論計數器,以顯示有多少評論,並且我實現了一個計數器緩存來完成此操作。 (就像@ article.comments.count是更多的查詢,並且因爲我使用Ancestry gem進行線程評論,所以子註釋不包括在該數字中,只包括根數。)
計數器緩存效果很好,並顯示準確的評論數量,但一如既往,有一點點抓住。評論並不總是立即發佈,只有註冊用戶才能立即發佈,而這些評論的狀態爲'2'。未註冊的用戶可以進入審覈隊列;這些評論具有:狀態'1'。
問題是,計數器計數緩存它們都是一樣的,所以如果你有節制和一個評論被批准四條意見,總計數爲5
有沒有一種方法來添加一個例外到櫃檯如果comment.status不是'2',緩存告訴它不增加?同樣,當在評論資源中的後端,並設置發佈評論(給它的狀態2),有沒有一種方法(模型,控制器或其他),使計數器緩存它相關的多態/內容類型增量?
comments.rb
# Comments
has_many :comments, :as => :commentable, :dependent => :destroy
accepts_nested_attributes_for :comments
article.rb
belongs_to :commentable, :polymorphic => TRUE, :touch => TRUE, :counter_cache => TRUE
想了一會兒,我想你是對的。我甚至可能會更進一步,放棄計數器緩存,並使用完整提交的評論和已發佈的評論欄。原因在於,我計劃在某一天實施社區信譽系統,並且發佈到總體比率將會非常有幫助。謝謝。 – Shannon 2011-05-04 19:22:52
很高興我能幫到你 – 2011-05-05 16:26:02