次の問題があります。
製品用のインデックス コントローラーがあり、インデックス コントローラーはクエリ文字列の無限の組み合わせを持つことができます。
/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に必要なことをさせたり、実際にそれらをまったく機能させたりすることはできません。私が見た宝石は、CashierとRails-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"
しかし、それはうまくいきませんでした - キャッシュをクリアしませんでした。私がやろうとしていることをする正しい方法は何ですか?