有没有使用caches_action和:layout => false忽略content_for块的解决方法?

在Rails 3中使用caches_action :layout => false时,在缓存视图中填充并在布局中使用的任何content_for块都将为空。 这有什么解决方法吗?

例如,在我的应用程序中,我有以下相当典型的设置。

从我的视图调用的辅助方法设置页面标题:

 # application_helper.rb def page_title(title) content_for(:page_title) { title } end 

我的布局文件中的一行如下

 # application.html.erb    

在一个视图中我可以打电话

 # index.html  

当然,如果使用:layout => false缓存操作,则会导致显示空白页面标题,因为操作缓存会忽略所有content_for块。

对此没有解决方法吗? 使用:layout => false动作缓存非常接近于非常有用,但是这个故障使得它非常笨拙。

其他人询问或评论同一问题:

  1. http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/d8d72f050701d44b
  2. http://www.golygon.com/2011/04/tips-and-tricks-in-ruby-on-rails/
  3. https://rails.lighthouseapp.com/projects/8994/tickets/4140-action-caching-with-caches_action-and-layout-false

和Rails文档 ,注意到这种行为:

“警告:在缓存中忽略了content_for。所以你不应该将它用于将被片段缓存的元素。”

我相信我解决这个问题的方法是创建一个标头部分的片段缓存,它依赖于正在填充的content_for。

所以它看起来像这样:

 # application.html.erb  <% cache("#{request.env['PATH_INFO']}/header") do %> <%= yield(:page_title) %> <% end %> 

因此,应该在缓存操作的同时填充此缓存片段。

我有完全相同的问题,并使用这个要点 ,它工作正常!