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)
ログをみてみましょう。キーが変わっているのが分かると思います。