ぶつかった問題
以下のような時、ビューの一部を避けて同じインスタンスをキーとしてフラグメントキャッシュを使いたいけれど、キーが重複されてしまうのでどうしたらいいのか。。と少し迷った。
インスタンスをキーとしたいのは、そのインスタンスのデータが更新されたらキャッシュも更新されるようにしたいため。
<div>
<% cache @service do %>
# キャッシュしたい
# @serviceが更新されたらキャッシュを更新するようにしたい
<% end %>
<div>
# ここはキャッシュしたくない
</div>
<% cache @service do %>
# キャッシュしたい
# @serviceが更新されたらキャッシュを更新するようにしたい
<% end %>
</div>
対処方法
以下のように配列の形でキーを設定できる。
左右を/で区切って一つの文字列としてくれる。
説明のため雑に1と2としているが、もっとわかりやすくするべきだと思う。
<% cache [@service, "1"] do %>
ほにゃ
<% end %>
<% cache [@service, "2"] do %>
ほにゃ
<% end %>
インスタンス変数を複数使う
以下のようにインスタンス変数複数使ってもいける
<% cache [@service, @staff] do %>
ほにゃらら
<% end %>
<% cache [@service, @shop] do %>
ほにゃらら
<% end %>
最初に試して失敗した例
キーが毎回変わるのでうまくいかない。
<% cache "#{@service}_1" do %>
ほにゃらら
<% end %>
参考