2012-12-24 81 views
0

我正在使用cache-digests gem並按照Railscast的說明操作,它會像您期望的那樣從緩存創建和讀取,但緩存似乎沒有正確更新一個關聯的記錄。Rails緩存沒有正確更新

將列表從一個類別移動到另一個類別時,category.live_entries計數保持不變,因爲我將其從移動到,但上升到移動到的類別。

所以這聽起來像我需要一個touch: all類型的方法,所以它觸及我正在移動它,以及它正在移動的那個?

_category.html.erb

<% cache category do %> 
    <li> 
    <%= link_to category.name, category %> 
    <% if category.live_entries > 0 %> 
     (<%= category.live_entries %>) 
    <% end %> 
     - <%= category.desc %> 
    </li> 
<% end %> 

category.rb

class Category < ActiveRecord::Base 
    has_many :listings 

    def live_entries 
    listings.where(verified: true).count 
    end 
end 

listing.rb

class Listing < ActiveRecord::Base 
    belongs_to :category, touch: true 

如何解決這個任何想法?

猜猜我可以創建一個before_update回調來觸摸舊的類別 - 但有沒有更好的方法?

回答

0

好吧,只需加入這個答案 - 但如果有人有更好的解決方案,請隨時分享。

我只是增加了一個after_update觸摸舊類別:

def touch_old_category(listing) 
    cat = listing.category_id_was 
    Category.find(cat).touch if cat 
    end