2011-12-09 18 views
0

私はActiveResourceを使って作業を始めました。モデルのいくつかのビットをキャッシュすることにしましたので、私は絶えずAPIを打っていません。いいよ。ActiveResource models + Sweepers

私はキャッシュの期限が切れているのを見て、掃除機を実装することに決めました。これは動作していません。

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