Rails缓存未正确更新

时间:2012-12-24 18:19:15

标签: ruby-on-rails-3 caching

我正在使用cache-digests gem并按照Railscast的说明,它按照您的预期创建和读取缓存,但缓存似乎没有正确地更新相关记录。

将列表从一个类别移动到另一个类别时,category.live_entries计数对于我从移动的类别保持不变,但是会将其移动到我移动到的类别。< / p>

所以听起来我需要一个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回调来触及旧类别 - 但是有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

好的只是添加这个作为答案 - 但如果有人有更好的解决方案,请随时分享。

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

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