1

次の問題があります。

製品用のインデックス コントローラーがあり、インデックス コントローラーはクエリ文字列の無限の組み合わせを持つことができます。

/products?category=5&color=6

これで、params をキーとして使用することで、これらすべてを簡単に保存できます。

caches_action :index, :cache_path => Proc.new { |c| c.params }

製品が追加、削除、または変更されたときに、すべてのインデックス キャッシュをクリアする必要がある場合に問題が発生します。私の知る限り、キャッシュされたオブジェクトを期限切れにするためのキーを知る必要があります。スイーパーでは次のようなことはできません。

def after_update(product)
   expire_action(product, :all)
end

私はキャッシュのタグ付けを少し調べましたが、私が見たGemに必要なことをさせたり、実際にそれらをまったく機能させたりすることはできません。私が見た宝石は、CashierRails-Cache-Tagsです。Cashierで次のことを試しました:

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tag => "products"

スイーパーファイルで次を使用します。

Cashier.expire "products"

しかし、キャッシャーで何かをしようとすると、次のエラーが発生します。

uninitialized class variable @@adapter in Cashier

rails-cache-tags を使用して、次のことを試しました。

caches_action :index, :cache_path => Proc.new { |c| c.params }, :tags => %w(products)

次に、スイーパーファイルで次を使用します。

cache.delete_tag "products"

しかし、それはうまくいきませんでした - キャッシュをクリアしませんでした。私がやろうとしていることをする正しい方法は何ですか?

4

1 に答える 1

0

引数としてexpire_fragment取ることができる which を呼び出すことができます:Regexp

一致するフラグメントを%r{pages/\d*/notes}すべて削除するため、すべてのメモが削除される可能性があります。

于 2012-10-30T16:33:39.517 に答える