我正在尝试在我的论坛中实现缓存,困难的部分是保留角色和组。
所以一个看起来不错的解决方案是使用动作缓存来运行一些before_filter
并cache_path
在 proc 中定义。
class Forums::TopicsController < Forums::BaseController
before_filter :authenticate_user!, except: :show
before_filter :load_resources
cache_sweeper :topic_sweeper
caches_action :show, cache_path: proc {
if user_signed_in?
if @topic.user == current_user || current_user.has_role?(:moderator) || current_user.has_role?(:superadmin)
"author_forum_topic_#{@topic.id}"
end
else
forum_topic_path(@forum, @topic)
end
}
def show
@post = Fo::Post.new
end
def create
# ...
end
private
def load_resources
@forum = Fo::Forum.find(params[:forum_id])
@category = @forum.category
@topic = @forum.topics.find(params[:id]) if !%w(create new).include?(action_name)
if %w(show).include?(action_name)
authorize! :read, @topic
@topic.register_view_by(current_user)
end
end
end
这个控制器看起来很简单,但类别/论坛列表是可访问的“组”,所以在这里我可以在 cache_path 中构建组 id 的总和
您如何看待这些缓存实践?