Railsのfragment cacheでビューの一部をキャッシュ

Rails の fragment cache(フラグメントキャッシュ)機能を使い、ビューの一部分をキャッシュします。

— 環境 —
Rails 4.1

スポンサーリンク

ビューでキャッシュしたい部分を cache メソッドのブロックで囲う

まず、以下のように、ビューのキャッシュしたい箇所を cache メソッドの do ブロックで囲います。

これで、posts_partial のバーシャルテンプレートによるレンダリングがキャッシュされます。キャッシュのキー名が “cache_key” なので、ここは任意で変数にするなど。

キャッシュの期限を設定するには、cache メソッドに expires_in というオプションを使えるそうです。詳細は、末尾参考リンクを参照。

上のサンプルコードは expires_in: 30.seconds で、キャッシュの期限を30秒後に設定。30秒経った後は、以前のキャッシュを読み込まずに新たにデータを読み込みます。Time.now などを表示させて確認できます。

また、skip_digest: true のオプションにより、キャッシュキーにダイジェストを付与しないようにしています。

【追記 2014/10/09】 expires_in: 30.seconds のオプションを追記しました。

コントローラーでフラグメントキャッシュが存在すればそれを読み込む

コントローラーでは、read_fragment メソッドを使います。

“cache_key” というキャッシュキー名のフラグメントキャッシュが存在すれば、それを読み込むようにする。フラグメントキャッシュが存在しない場合は、普通にデータベースにアクセスして @posts を返すようにします。

以上で、fragment cache を用いてビューの一部をキャッシュできました。オブジェクトをキャッシュするには、以下 Rails.cache.fetch についてのエントリーを参考にお願いします。

Rails.cache.fetch でオブジェクトをキャッシュ | EasyRamble

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!