Rails 4 cache_digests没有捕获更改

时间:2014-02-25 15:11:44

标签: ruby-on-rails caching ruby-on-rails-4

我正在尝试使用Rails 4的片段缓存来缓存我的导航菜单。

模型

class Page < ActiveRecord::Base

  belongs_to :parent, :class_name => 'Page', :touch => true

  has_many :children, :class_name => 'Page', 
    :foreign_key => 'parent_id'

  ...

end

这部分工作正常。每当我更新嵌套页面时,所有父项的updated_at值都会更改。但是不会写入该组页面的新缓存视图文件。

导航视图

<nav>
  <ul>
    <% Page.level_1.each do |page_1| %>
      <% cache page_1 do %>
      <li>
        <%= link_to page_1.title, level_1_page_path(page_1.slug) %>
        <% if page_1.children.count > 0 %>
          # continue nesting children
          ...
        <% end %>
      </li>
      <% end %>
    <% end %>
  </ul>
</nav>

为什么Rails没有识别页面中的变化?

1 个答案:

答案 0 :(得分:1)

事实证明我的一切都是正确的,但我的模型的范围是:

scope :level_1, where(:level => 1)
默认情况下,

正在缓存,因为它不包含lambda。将范围更改为:

scope :level_1, -> { where(:level => 1) }

解决了我的问题,现在缓存摘要工作正常。