私はあなたの質問を理解していると思いますが、解決策としてオプション 2 を理解しているかどうかはわかりません。これは、それが優れた解決策ではないことを示している可能性があります。私だったら、再利用されているユーザー gravatar を囲む html を、ユーザー ID をキーとする最上位のキャッシュ キーにキャッシュするだけです。IE
<% cache("user_#{user.id}_profile_image") do %>
<img src="blahblahblah or gravatar helper code or whatev">
<% end %>
ユーザーが gravatar をアップロードし、その後デフォルトの gravatar 画像がキャッシュされることを懸念している場合、最善の選択肢は次のとおりです。
1) グラバターをアップロードするために送信するユーザー プロファイル領域に、そのユーザーのキャッシュ フラグメントを実際に無効にする更新アクションを指す更新リンクを用意します。すなわち
expire_fragment "user_#{user.id}_profile_image"
( http://guides.rubyonrails.org/caching_with_rails.html )
2) デフォルトの gravatar リダイレクトを使用して画像をアップロードする代わりに、クリックをインターセプトして独自のコントローラーに送信し、バックグラウンド タスクを 15 分ほどで実行するようにスケジュールしてから、リダイレクトする JavaScript 応答をレンダリングすることができます。実際の gravatar ページに移動して、写真をアップロードします。バックグラウンド ワーカーは、後で実行されたときにフラグメントをクリアします。これは、彼らが実際に画像をアップロードすることを前提としており、全体としてはひどい考えだと思います.
正直なところ、最初からグラバターをキャッシュすることを心配している理由がわかりません。gravatar サーバーにヒットしているため、サーバーに負荷がかかることはありません。自分で保存することは、gravatar を使用する点で少し自滅的なようです。うまくいけば、あなたの質問はより簡単になりました(そして、ユーザーが自分の画像をアップロードするときにデフォルトのキャッシュされたグラバター画像をクリアする方法)。これは#1で解決できます。これにより、キャッシュされたグラバター画像を期限切れにし、独自のものを使用して再キャッシュできますユーザーが画像をアップロードした後の画像。(次のようなロジックがあるため、次にページがレンダリングされたときに画像が再キャッシュされます。
<% cache("user_#{user.id}_profile_image") do %>
<% if user.has_uploaded_image? %>
<%= display_profile_image %>
<% else %>
<%= display_gravatar_image %>
<% end %>
<% end %>