1

フォーラムにキャッシュを実装しようとしていますが、難しいのはロールとグループを保持することです。

したがって、良いと思われる解決策は、アクション キャッシングを使用していくつかを実行し、proc でbefore_filter定義することです。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 にグループ ID の合計を作成できます。

これらのキャッシングの実践についてどう思いますか?

4

2 に答える 2

2

フォーラムをキャッシュするために多くの方法を試した後、Cells https://github.com/apotonick/cellsを使用することにしました。

機能を追加する場合、ページ全体のキャッシュは難しすぎる

セルは、フラグメントのキャッシュとテストを行うためのより良い方法です

于 2012-10-13T13:27:45.757 に答える
0

フラグメント キャッシングの使用を検討してください。投稿全体またはその一部だけをキャッシュできます。私たちのソーシャル アプリでは、ウォール ポスト (ユーザーに関する情報が表示される部分とポスト ボディ) をキャッシュするために使用しました。「削除」、「編集」、「レポート」などのボタンを持つ部分は、ユーザーのタイプに応じてロードごとに生成されました。たとえば、所有者は削除または編集できますが、非所有者のみがレポートします。

フラグメント キャッシングはビューで実行されます。

于 2012-09-23T12:26:13.573 に答える