Rails4キャッシュについて

Rails4からpageキャッシュなくなるなどキャッシュの部分が変わったので、Rails4でキャッシュ(fragmentキャッシュ)を使う場合についてざっと調べたのでメモ。
cache_digestsを使います。
これを使わないとテンプレートに変更があってもキャッシュが削除されません。

今回の例ではalbumとphotoという名前のモデルを例にしています。albumとphotoは1対多の関係にあります。

class Album < ActiveRecord::Base
   has_many  :photos
end
class Photo < ActiveRecord::Base

  belongs_to :albums, counter_cache: true, dependent: :destroy, touch: true


end

次にconfig/environments/development.rbを編集します。

config.action_controller.perform_caching = true


続いてview側の方を編集します。cacheに入れておきたい箇所を以下のように書きます。

<% cache @album  do %>
  <%= @album.name %>
・・・・・
・・・・
<% end %>

ここまで変更したら、次にcache_digestsをbundle installで入れます。


$ bundle install --path vendor/bundle

ではアプリケーションを起動してみましょう。


$ bundle exec rails s

先ほどキャッシュの設定をいれたページにアクセスし、そのとき出力されたログをみてみます。


Read fragment views/albums/2-20131226022703652562000/02dd0aaceff7445447dac4588b2f39a9/02dd0aaceff7445447dac4588b2f39a9 (0.1ms)
Write fragment views/albums/2-20131226022703652562000/02dd0aaceff7445447dac4588b2f39a9/02dd0aaceff7445447dac4588b2f39a9 (1.1ms)

キャッシュにデータが入る様子が分かると思います。
次にテンプレートを変更して、再度再起動してログを見てみましょ。


Read fragment views/albums/2-20131226022703652562000/8eb75729294d374a0042b0d6c178a82b/8eb75729294d374a0042b0d6c178a82b (0.1ms)
Write fragment views/albums/2-20131226022703652562000/8eb75729294d374a0042b0d6c178a82b/8eb75729294d374a0042b0d6c178a82b (1.1ms)

ログをみてみましょう。キーが変わっているのが分かると思います。