我正在使用 cache-digests gem 并按照 Railscast 的说明进行操作,它会按照您的预期创建和读取缓存,但缓存似乎没有相对于关联记录正确更新。
将列表从一个类别移动到另一个类别时,我将其从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 %>
类别.rb
class Category < ActiveRecord::Base
has_many :listings
def live_entries
listings.where(verified: true).count
end
end
清单.rb
class Listing < ActiveRecord::Base
belongs_to :category, touch: true
关于如何解决这个问题的任何想法?
猜猜我可以创建一个 before_update 回调来触及旧类别 - 但有更好的方法吗?