フォーラムにキャッシュを実装しようとしていますが、難しいのはロールとグループを保持することです。
したがって、良いと思われる解決策は、アクション キャッシングを使用していくつかを実行し、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 の合計を作成できます。
これらのキャッシングの実践についてどう思いますか?