在Rails 3中使用caches_action :layout => false
时,在缓存视图中填充并在布局中使用的任何content_for块都将为空。有没有解决方法呢?
E.g。在我的应用程序中,我有以下相当典型的设置。
从我的视图调用的辅助方法设置页面标题:
# application_helper.rb
def page_title(title)
content_for(:page_title) { title }
end
布局文件中的一行如下
# application.html.erb
<head>
<title><%= yield(:page_title) %></title>
</head>
在视图中我可以打电话
# index.html
<% page_title 'Hello!' %>
当然,如果您使用:layout => false
缓存操作,则会导致显示空白页面标题,因为操作缓存会忽略所有content_for块。
这没有解决方法吗?使用:layout => false
进行的动作缓存非常接近于非常有用,但是这个故障使得它非常笨拙。
其他人询问或评论同一问题:
注意到此行为的Rails documentation:
“警告:在缓存中忽略了content_for。所以你不应该将它用于将被片段缓存的元素。”
答案 0 :(得分:2)
我相信我解决这个问题的方法是创建一个标题部分的片段缓存,它依赖于正在填充的content_for。
所以它看起来像这样:
# application.html.erb
<head>
<% cache("#{request.env['PATH_INFO']}/header") do %>
<title><%= yield(:page_title) %></title>
<% end %>
所以应该在缓存操作的同时填充此缓存片段。
答案 1 :(得分:0)
我有完全相同的问题并使用了this gist,它运行正常!