0

我有一个 json api,我在其中执行动作缓存:

class Api::V2::TagsController < Api::V2::BaseController

  before_filter :set_cache_headers, :only => [:categories, :tribes]
  caches_action :categories, :tribes, :expires_in => 1.hour

我发现使此缓存过期的唯一方法是使用:

Rails.cache.delete api_v2_categories_url(:locale => nil)+'.json?'

这太丑了

请问谁能帮我改进这个可怕的黑客?


更多信息:

缓存效果很好,我在日志中看到缓存写入:

Cache write: http://localhost:3000/api/v2/categories.json?

在管理名称空间中,我需要使缓存过期,我尝试过:

expire_action(:controller => '/api/v2/tags', :action => 'categories', :format => :json)

失败并输出:

过期片段视图/localhost:3000/mu-8c54ade2-cbb77ba0-4f0c28d3-607169d0.json?action=categories&controller=api/v2/tags&locale=fr

PS:我试过这个答案没有成功:rails caching: expire_action in another namespace

4

2 回答 2

0

您可以在您的 api 中创建一个名为 clear_categories 的新路由,并在其中调用

expire_action :action => :categories

然后在您的管理员中,只需点击该路线即可。您还可以通过将重定向 url 传递给 clear_categories 或类似的东西来重定向回调用管理页面。

于 2013-04-25T15:52:05.347 回答
0

我有一个类似的问题并使用类似下面的方法修复它,

expire_fragment(ActionCachePath.new(self, {
    :controller => '/api/v2/tags',
    :action => 'categories'
}, true).path)
于 2013-11-28T19:35:20.513 回答