2011-12-09 19 views
0

我剛開始工作的ActiveResource,並決定緩存模式,所以我不打API不已的幾個位。好的。的ActiveResource模型+清掃

我看着即將到期的高速緩存,並決定實施清掃(它做但我已經沒有)。這不起作用。

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和緩存和清掃器只有一點點工作,我想不通在嘗試各種各樣的組合後,去哪裏看看。我可以從控制檯爲資源設置和過期,但在應用程序中,緩存設置,但我沒有做任何事情觸發刪除。

建議?

回答

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 

例如在原來的代碼,你貼,你沒有通過資源的expire_cache_for_my_resource方法,因此被一遍又一遍的到期相同的靜態密鑰。

+0

是的,錯別字是實際的代碼翻譯成東西示例。這是比這更復雜一點,但我並沒有在myresource通過正確(在部分時,我仍然得到鉤到模型的工作我已經刪除,我不知道我需要的時候, 但不管怎麼說)。只要我把它放在一邊,然後回來,就會發現。謝謝。 – blueblank