假设我有一个带有以下布局的简单应用
<html>
<head>...</head>
<body>
<%= render :partial => 'layouts/header' %>
<%= yield %>
<%= render :partial => 'layouts/footer' %>
</body>
</html>
我的页眉和页脚部分非常简单,但它们需要动态数据,需要几毫秒才能从数据库中获取。现在,我在应用程序控制器中使用before_action:方法获取头数据,因为它需要在所有页面上(Ajax调用除外):
before_action :prepare_header
private
def prepare_header
@news = ...
end
如何缓存prepare_header操作或header.erb.html。 我正在使用Rails 4.0.0
谢谢。
答案 0 :(得分:1)
您可以在视图中使用片段缓存来完成。
您的@news
变量是根据某些数据计算的,例如params[:a], params[:b] and params[:c]
。基于此,您可以使用缓存块
<% cache([params[:a], params[:b], params[:c], 'header']) do %>
you html code here
<% end %>
根据所需的控制变量,您可以拥有部分的缓存版本。有关视图缓存的更多信息,请查看here。
一个好的做法是为cache_key
添加更多控件,以便按需使其无效,例如:
cache([cache_key_1, cache_key_2, version_number])
当某些内容发生变化时,您会碰撞version_number并相应地失效!
当然是expires_at
参数。
<强>更新强>
对于动作缓存,您可以尝试this gem。并将你想要的参数传递给你
if: Proc { ... }
参数