Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails缓存未正确更新_Ruby On Rails 3_Caching - Fatal编程技术网

Ruby on rails 3 Rails缓存未正确更新

Ruby on rails 3 Rails缓存未正确更新,ruby-on-rails-3,caching,Ruby On Rails 3,Caching,我正在使用缓存摘要gem,并按照Railscast的说明进行操作,它会像您所期望的那样创建缓存并从中读取,但缓存似乎没有根据相关记录进行正确更新 将列表从一个类别移动到另一个类别时,我将列表从一个类别移动到另一个类别时,category.live_entries计数保持不变,但对于我将列表移动到的类别,计数会上升 所以听起来我需要一个touch:alltype方法,这样它就可以接触到我要移动的对象和它要移动到的对象了 _category.html.erb <% cache category

我正在使用缓存摘要gem,并按照Railscast的说明进行操作,它会像您所期望的那样创建缓存并从中读取,但缓存似乎没有根据相关记录进行正确更新

将列表从一个类别移动到另一个类别时,我将列表从一个类别移动到另一个类别时,
category.live_entries
计数保持不变,但对于我将列表移动到的类别,计数会上升

所以听起来我需要一个
touch:all
type方法,这样它就可以接触到我要移动的对象和它要移动到的对象了

_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 %>

  • 0 %> () -
  • 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
    
    类列表
    有没有办法解决这个问题


    我想我可以创建一个“更新前”回调来触及旧类别-但是有更好的方法吗?

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

    我刚刚添加了一个after_更新来接触旧类别:

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