2

我希望过期,然后使用可公开访问的端点刷新控制器操作的缓存。

目前在我的应用程序中,/all 返回缓存的 json,并且 /update 使缓存过期。您可以在下面看到现有的相关代码。我想做的不仅是使缓存过期,而且还强制刷新。所以,我的问题是:

有没有办法在动作缓存过期后启动它的刷新,而不点击动作?

如果答案是否定的(正如我开始怀疑的那样),那么最好的方法是什么?我要求更新操作返回 HTTP 200 状态,而不是 301 重定向,因此仅重定向到 /all 不是一个选项。

供应商控制器

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
4

1 回答 1

3

你应该使用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

可能有帮助的来源:

于 2013-02-25T16:32:12.957 回答