【发布时间】:2018-05-01 11:44:26
【问题描述】:
我正在尝试缓存侧边栏。里面有两个组列表(1:最喜欢的组,2:others_groups)
我的缓存方法:
1.将两个组列表缓存到我的模型用户中
def cached_groups
Rails.cache.fetch([self, "groups"]) {groups.to_a}
end
def cached_favgroups
Rails.cache.fetch([self, "fav_groups"]) {fav_groups.to_a}
end
2.缓存整个列表以及每个组的下方
<% cache 'cache_all_groups_fav' do %>
<% current_user.cached_favgroups.each do |group| %>
<% cache group do %>
<%= render 'groups/group', group: group %>
<% end %>
<% end %>
<% end %>
<% cache 'cache_all_groups' do %>
<% current_user.cached_groups.each do |group| %>
<% cache group do %>
<%= render 'groups/group', group: group %>
<% end %>
<% end %>
<% end %>
3.过期缓存到我的组/控制器
def favorit
FavoritGroup.where(group_id: @group.id).where(user_id: current_user.id).first_or_create
Group.where(group_id: @group.id).where(user_id: current_user.id).delete_all
expire_fragment('cache_all_groups_fav')
expire_fragment('cache_all_groups')
expire_fragment('cached_favgroups')
expire_fragment('cached_groups')
expire_fragment('group')
respond_to do |format|
format.html { redirect_back }
format.js { render 'groups/js/favorit' }
end
end
def unfavorit
FavoritGroup.where(group_id: @group.id).where(user_id: current_user.id).delete_all
Group.where(group_id: @group.id).where(user_id: current_user.id).first_or_create
expire_fragment('cache_all_groups_fav')
expire_fragment('cache_all_groups')
expire_fragment('cached_favgroups')
expire_fragment('cached_groups')
expire_fragment('group')
respond_to do |format|
format.html { redirect_back }
format.js { render 'groups/js/unfavorit' }
end
end
注意:为此,我使用的是 store_cache 'dally' Ruby2.4 (Rails 5.1.4)
问题:expire_fragment 方法不起作用
你知道这里可以附加什么问题吗?
你的缓存策略也一样吗?
【问题讨论】:
标签: ruby-on-rails ruby caching