Первая проблема заключается в том, что ваш before_filter для require_user находится после кэширования действия, поэтому оно не запустится.Чтобы исправить это, используйте этот код контроллера:
class ProductsController < ApplicationController
before_filter :require_user
caches_action :index, :layout => false
def index
@products = @user.products
end
end
Во-вторых, для кэширования действий вы делаете то же самое, что и кэширование страниц, но после запуска фильтров ваш код @ user.products не будетзапустить.Есть несколько способов исправить это.
Во-первых, если вы хотите, вы можете кэшировать действие на основе параметров, которые передаются на страницу.Например, если вы передаете параметр user_id, вы можете кэшировать на основе этого параметра, например:
caches_action :index, :layout => false, :cache_path => Proc.new { |c| c.params[:user_id] }
Во-вторых, если вы хотите просто кэшировать запрос, а не всю страницу, вы должны удалить кэширование действий.полностью и только кешируйте запрос, например:
def index
@products = Rails.cache.fetch("products/#{@user.id}"){ @user.products }
end
Это должно помочь вам получить отдельный кеш для каждого пользователя.