Установить caches_action,:expires_in => динамически

Каждый пример caches_action Я видел выглядит так:

caches_action, :expires_in => 5.minutes

но я бы хотел установить expires_in основанный на времени истечения объекта, используемого в действии. Есть ли способ ссылаться на этот объект при настройке expires_in поскольку рассматриваемый объект основан на params отправили на акцию?

Я пытался с помощью

caches_action, :expires_in => Object.find(params[:id])

но увы это не позволит мне ссылаться на параметры там. Предложения приветствуются!

2 ответа

Решение

Похоже, вам нужно использовать Proc, который может передавать параметры контроллера. Вот пример

caches_action :show, cache_path: Proc.new {|controller_instance| "some_cache_path_that_is_uniq/#{controller_instance.params[:id]}"}

Основной целью кэширования действий является предотвращение выполнения действий каждый раз при поступлении нового запроса. Если явно не определены параметры, параметры не учитываются.

Если вы хотите кешировать данные на основе экземпляров, я бы предложил использовать условное получение.

Другие вопросы по тегам