Обновление кэширования в Rails после истечения срока действия

Я ищу, чтобы истечь, а затем обновить кэш для действия контроллера, используя общедоступную конечную точку.

В настоящее время в моем приложении /all возвращает кешированный json, а / update истекает кеш. Вы можете увидеть существующий соответствующий код ниже. То, что я хотел бы сделать, это не только закончить кеш, но и принудительно обновить. Итак, мой вопрос:

Есть ли способ инициировать обновление кэша действий после его истечения, не затрагивая действие?

Если ответ на этот вопрос - нет (как я начинаю подозревать), то каков наилучший способ сделать это? Мне требуется действие обновления для возврата статуса HTTP 200, а не перенаправления 301, поэтому просто перенаправление на /all не вариант.

VendorsController

caches_action :all, :expires_in=>2.weeks

....

def all 
  respond_to do |format|
    format.json { render :json => Vendor.all }
    format.html { render :json => Vendor.all }
  end
end


....

def update
  render :nothing => true
  expire_action :action => :all
end

1 ответ

Решение

Вы должны использовать write_fragment

def update
  render :nothing => true
  expire_action :action => :all

  cache_path = ActionCachePath.new(self, {:action => :all}, false).path
  write_fragment(cache_path, render_to_string(:json => Vendor.all))
end

Источник, который может помочь:

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