0

我正在使用 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 回调来触及旧类别 - 但有更好的方法吗?

4

1 回答 1

0

好的,只需将其添加为答案 - 但如果有人有更好的解决方案,请随时分享。

我刚刚添加了一个 after_update 来触及旧类别:

  def touch_old_category(listing)
    cat = listing.category_id_was
    Category.find(cat).touch if cat
  end
于 2012-12-24T18:49:14.483 回答