RailsのFragment Cache

Viewだけで Fragmentキャッシュをするには

<% cache key do %>
hogehoge
<% end %>

で良いのですが、例えばControllerでも負荷の重いところをスルーさせようとするとViewとControllerで深い連携が必要になるからゴチャゴチャしはじめるます。MVCモデルが裏目に出ているとも言えましょう。ちなみに、これをチェックするにはコントローラ側で

unless fragment_exist?(key)
  #負荷のかかる処理
end

とかやればいいんですが、デフォルトの FileCacheだとハッシュ関数でダイジェスト文字列をkeyの後ろにつけてしまうので、このコードではこの処理は毎回実行されてしまいます。この文字列を Controller側で知る方法が分からないので困りました・・・View側での対処は簡単で

<% cache key, skip_digest: true do %>
hogehoge
<% end %>

のように skip_digestオプションを指定してあげればOK。

こんなことするくらいならAction cacheのほうが簡単かな?

関連