2014-02-25 85 views
1

我試圖使用Rails 4的片段緩存來緩存我的導航菜單。Rails 4 cache_digests沒有捕捉到變化

型號

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

事實證明,我擁有了一切正確的,但我的模型的範圍:

scope :level_1, where(:level => 1) 

正被默認緩存,因爲它沒有包含lambda。改變範圍到:

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

解決了我的問題,現在緩存摘要工作完美。