我正在尝试使用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没有识别页面中的变化?
答案 0 :(得分:1)
事实证明我的一切都是正确的,但我的模型的范围是:
scope :level_1, where(:level => 1)
默认情况下,正在缓存,因为它不包含lambda
。将范围更改为:
scope :level_1, -> { where(:level => 1) }
解决了我的问题,现在缓存摘要工作正常。