ActiveResource模型+扫地机

时间:2011-12-09 16:26:56

标签: ruby-on-rails ruby-on-rails-3 caching activeresource

我刚刚开始使用ActiveResource,并决定缓存一些模型,所以我不会不停地使用api。好的,很好。

我已经研究过期的缓存,并决定实施一个清扫器(我还没有做过)。这不起作用。

AR模型:

class Myresource < ActiveResource::Base
  extend ActiveModel::Callbacks
  define_model_callbacks :update

  "stuff"

  def current
    Rails.cache.fetch("/key/#{self.id}", :expires_in => 5.minutes) do
      Myresource.find(ID)
    end 
  end

end

扫路机:

class MyresourceSweeper < ActionController::Caching::Sweeper
  observe Myresource

  def after_update(myresource)
    expire_cache_for_myresource
  end

private
  def expire_cache_for_myresource
    Rails.cache.delete '/key/myresource.id'
  end
end

控制器:

cache_sweeper :myresource_sweeper

因此我只使用了AR和缓存以及Sweepers,我无法弄清楚在尝试各种组合之后应该去哪里看。我可以从控制台设置和过期资源,但在应用程序中,缓存已设置,但我没有做任何事情就是触发删除。

建议?

1 个答案:

答案 0 :(得分:1)

您发布的代码有拼写错误。我有点怀疑这是你真正的问题,但是对于它的价值,我认为你的意思是写下你的扫地机如下:

class MyresourceSweeper < ActionController::Caching::Sweeper
  observe Myresource

  def after_update(myresource)
    expire_cache_for_myresource(myresource)
  end

  private
  def expire_cache_for_myresource(myresource)
    Rails.cache.delete "/key/#{myresource.id}"
  end
end

E.g。在您发布的原始代码中,您没有将资源传递给expire_cache_for_my_resource方法,因此反复使用相同的静态密钥。