🐘

【Rails】fresh_when について簡単に解説する

に公開

概要

以前の記事で stale? メソッドについて解説しました。
https://zenn.dev/ebina_shohei/articles/ac1a1e39acbee9

今回はその中で使われている fresh_when メソッドについて簡単に解説します。
https://github.com/rails/rails/blob/984c3ef2775781d47efa9f541ce570daa2434a80/actionpack/lib/action_controller/metal/conditional_get.rb#L249-L252

fresh_when とは

fresh_when メソッドは引数で受け取った etaglast_modified からレスポンスを作成し、
そのレスポンスとリクエストを比較して、リクエストが最新(fresh)であれば head :not_modified で304のステータスコードとレスポンスヘッダーを返すようにしています。
https://github.com/rails/rails/blob/984c3ef2775781d47efa9f541ce570daa2434a80/actionpack/lib/action_controller/metal/conditional_get.rb#L117-L135

stale? は上記の fresh_when でステータスコードとレスポンスヘッダーを作成したうえで、
リクエストが最新かどうかを判定して返しています。
https://github.com/rails/rails/blob/984c3ef2775781d47efa9f541ce570daa2434a80/actionpack/lib/action_controller/metal/conditional_get.rb#L249-L252

まとめるとこんな感じになります。

レスポンスヘッダの作成 戻り値
stale? する true/false
fresh_when する なし

Discussion