1

我正在使用似乎可以与 Rails 6 配合使用的动作缓存。

问题是如何在底层模型更新时使缓存过期?

根据Rails 指南

请参阅 actionpack-action_caching gem。有关新首选方法,请参阅 DHH 的基于键的缓存过期概述。

根据Action Caching gem issue,使用 Rails Observer 扫描缓存是可行的。

https://github.com/rails/rails-observers#action-controller-sweeper

但是Rails Observer似乎不适用于 Rails 6。

那么,如何通过after_save回调使缓存过期?

4

1 回答 1

3

您可以传入自己的 cache_path 以使密钥过期。您仍然需要获取一些记录来计算它。

class MyController < ApplicationController
  before_action :set_record

  caches_action :show, expires_in: 1.hour, cache_path: ->(_) { show_cache_key }

  def show; end

  private

  def set_record
    @record = Record.find(params[:id])
  end

  def show_cache_key
    @record.cache_key
  end
end

手动进行缓存失效是一个令人难以置信的令人沮丧且容易出错的过程,因此我会避免在 an中使键失效,after_step而是使用基于键的过期。

于 2021-02-27T07:17:28.760 回答