1

我正在尝试在我的论坛中实现缓存,困难的部分是保留角色和组。

所以一个看起来不错的解决方案是使用动作缓存来运行一些before_filtercache_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 的总和

您如何看待这些缓存实践?

4

2 回答 2

2

在尝试了多种缓存我的论坛的方法后,我选择使用 Cells https://github.com/apotonick/cells

添加更多功能时,整页缓存太难了

单元格是进行片段缓存和测试的更好方法

于 2012-10-13T13:27:45.757 回答
0

考虑使用片段缓存。您可以缓存整个帖子或只是其中的一部分。在我们的社交应用程序中,我们使用它来缓存墙帖——显示用户信息的部分和帖子正文。每次加载时都会根据用户的类型生成带有“删除”、“编辑”、“报告”等按钮的部分,例如所有者可以删除或编辑,但非所有者只能报告。

片段缓存在视图中执行。

于 2012-09-23T12:26:13.573 回答