私はシリアライザレベルでキャッシュを使用しています。シリアライザレベルでは、ほとんどの場合正しく動作します(モデルのupdated_atの変更や関連するシリアライザの取得はキャッシュ内で無効になります)。active_model_serializers 0.10.0でキャッシュを無効にするために推奨される方法は何ですか?
しかし、場合によっては、特定のシリアライザを手動でターゲットにしてキャッシュを無効にする必要がある場合があります。たとえば、現在、質問と回答の機能を構築しています。質問シリアライザには、last_answer_atとanswer_countが含まれています。私は質問ができるだけ長くキャッシュされることを望んでいますが、ほとんど変わりませんが、新しい回答が作成されたり、既存の回答が削除されたりすると、関連する質問をターゲットにして、キャッシュを無効にしたい。
は、私は少しこれを調査し、あなたが使用してキャッシュキーを得ることができることを発見しました:
serializer = QuestionSerializer.new(self)
adapter = ActiveModelSerializers::Adapter.create(serializer)
cache_key = serializer.cache_key(adapter)
をただし、キャッシュキーの属性部分を含みません。
は、私がここに達成するために望んでいる、(私の例問題の)親オブジェクトのような方法が含まれているだろうということです。
def clear_cache
Rails.cache.clear(cache_key)
end
def cache_key
serializer = QuestionSerializer.new(self)
adapter = ActiveModelSerializers::Adapter.create(serializer)
serializer.cache_key(adapter)
end
...と私の子オブジェクトで、それを呼び出します回答を作成または削除するときに使用します。
after_create :clear_parent_cache
def clear_parent_cache
question.clear_cache
end
もっと良い方法がありますか?あなたは一貫して正しいキャッシュキーを取得する方法をお勧めできますか?
おかげで、 ダン
注:これはまた、それはより幅広い視聴者に見えるのです確実にするためにここに投稿し、GitHubのレポ(https://github.com/rails-api/active_model_serializers/issues/1816)上の問題として提起されます。