スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス5期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

【Rails】partialのcollectionをcacheし、有効期限(expires_in)を設定する方法

※記事内に提携先企業のアフィリエイト広告(リンク、バナー等)、Google広告を含む場合があります

【Rails】partialのcollectionをcacheし、有効期限(expires_in)を設定する方法


こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。


このブログでは、

僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、

ノウハウなどを書いていきます。


今回は、


  • 【Rails】partialのcollectionをcacheし、有効期限(expires_in)を設定する方法


について書いていきます。




【Rails】partialのcollectionをcacheし、有効期限(expires_in)を設定する方法


結論、

下記のような感じになります。

<%= render partial: 'shared/users_info', collection: User.all, cached: true, expires_in: 10.minutes %>


やり方としては、

cache オプションと expires_in オプションを指定するだけなのですが、

生成されるキャッシュのキーについて補足しておきます。




生成されるキャッシュのキーについて


  • shared/users_info.html.erbというパーシャルがあるとします。
<%= render partial: 'shared/users_info', collection: User.all, cached: true, expires_in: 10.minutes %>


これで生成されるキャッシュのキーは下記のような感じになります。

ビューファイルのパス:ビューファイルの更新日時から生成される一意でランダムな32文字/Userインスタンスのidとupdated_atから生成された文字列




キャッシュのキーをカスタマイズする場合


# (例えばの話)Userインスタンスのname属性をキャッシューのキーにしたい場合
# ->(user)には、User.allの中身が引数として渡ってくる
<%= render partial: 'shared/users_info', collection: User.all, cached: ->(user) { user.name }, expires_in: 10.minutes %>


これで生成されるキャッシュのキーは下記のような感じになります。

ビューファイルのパス:ビューファイルの更新日時から生成される一意でランダムな32文字/Userインスタンスのname


以上です。




参考


  • Cached partial collections renderer is broken for cached, expiring partials; doesn't support expires_in

github.com


  • Fix issue with cached partial collections

github.com


  • Ruby on Rails のフラグメントキャッシュのキャッシュキーはどのように決まるか

medium.com


  • コレクションキャッシュでキャッシュのキーをカスタマイズする方法

https://blog.takeyuweb.co.jp/entry/2020/09/03/145738blog.takeyuweb.co.jp




最後に


下記の表に、

フリーランスエンジニア向けの人気エージェントをまとめてみました。


エージェント選びで悩んでいる方は是非参考にしてみてくださいね★