- 更新日: 2014年10月8日
- Rails
Railsのfragment cacheでビューの一部をキャッシュ
Rails の fragment cache(フラグメントキャッシュ)機能を使い、ビューの一部分をキャッシュします。
— 環境 —
Rails 4.1
ビューでキャッシュしたい部分を cache メソッドのブロックで囲う
まず、以下のように、ビューのキャッシュしたい箇所を cache メソッドの do ブロックで囲います。
1 2 3 |
<% cache "cache_key", expires_in: 30.seconds, skip_digest: true do %> <%= render 'posts_partial', posts: @posts %> <% end %> |
これで、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 メソッドを使います。
1 2 3 |
unless read_fragment("cache_key") @posts = Post.where(user_id: 1).limit(10) end |
“cache_key” というキャッシュキー名のフラグメントキャッシュが存在すれば、それを読み込むようにする。フラグメントキャッシュが存在しない場合は、普通にデータベースにアクセスして @posts を返すようにします。
以上で、fragment cache を用いてビューの一部をキャッシュできました。オブジェクトをキャッシュするには、以下 Rails.cache.fetch についてのエントリーを参考にお願いします。
Rails.cache.fetch でオブジェクトをキャッシュ | EasyRamble
- – 参考リンク –
- Caching with Rails: An overview — Ruby on Rails Guides
- ActionController::Caching::Fragments
- ActionController::Caching::Fragments – APIdock
- 無題メモランダム: [Ruby on Rails] Railsのキャッシュ(フラグメント)
- [rails]fragment cacheを使ってみる | hello-world.jp.net
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!