Кеширование отдельных фрагментов страницы.

Posted on March 21, 2007
Кэширование целых страниц это конечно хорошо, но иногда - абсолютно бесполезная вещь.
Для этих целей необходимо применять кэширование отдельных фрагментов.
Например, у нас есть контроллер выдающий список пользователей

class UserController < ApplicationController
  layout 'main'

  def list
    @users = User.find :all
  end
  def show
    @user = User.find params[:id].to_i
  end
end
Для кэширования этих экшенов необходимо немного переработать данный код

class UserController < ApplicationController
  layout 'main'
  caches_action :list, :show

  def list
    unless read_fragment({})
      @users = User.find :all
    end
  end
  def show
    unless read_fragment({:id => params[:id].to_i})
      @user = User.find params[:id].to_i
    end
  end
end
В шаблоне же необходимо блок которй будщет кэшироваться заключить в следующую конструкцию:

<% cache do %>

<%end %>
Для удаления кэшированного фрагмента используется комманда expire_fragment. Например

expire_fragment(:controller => 'user', :action => 'list')
expire_fragment(:controller => 'user', :action => 'show', :id => 3)
При необходимости можно перенести директорию в которой находится кэш с помощью вписывания в environment.rb следующей строки:

ActionController::Base.fragment_cache_store = :file_store, "/path/to/cache/directory"


Более подробно это описано тут

Comments
  1. ДашкаApril 18, 2007 @ 02:44 PM
    Где