Rails缓存一个论坛

时间:2012-09-23 10:38:44

标签: ruby-on-rails caching

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

所以一个似乎很好的解决方案是使用动作缓存来运行一些before_filter并在proc中定义cache_path

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中构建一组group id

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

考虑使用fragment caching。您可以缓存整个帖子或仅缓存其中的一部分。在我们的社交应用程序中,我们使用它来缓存墙上的帖子 - 显示用户信息的部分和帖子正文。具有诸如“删除”,“编辑”,“报告”之类的按钮的部分是根据用户的类型在每个负载上生成的,例如,所有者可以删除或编辑,但非所有者只能报告。

Fragment caching在视图中执行。