Для этих целей необходимо применять кэширование отдельных фрагментов.
Например, у нас есть контроллер выдающий список пользователей
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"
Более подробно это описано тут