、私はそう(簡体字)のように、fresh_when
を使用しています:ロケールが変更されたときに条件付きGETキャッシュを期限切れにする方法は? JSON APIの場合
class BalancesController < ApplicationController
def mine
fresh_when(current_user.balance)
end
end
これはてETag(もし-なしマッチ)とupdated_atの(場合 - 変更 - 以降)だけで罰金で動作します。
ただし、異なる言語のキャッシュを無効にしたいとします。簡体字:
class BalancesController < ApplicationController
before_action :set_locale
def mine
fresh_when(current_user.balance)
end
private
def set_locale
@locale = locale_from_headers
end
end
locale_from_headers
はより複雑libですが、この例では、ヘッダ"Accept-Language: nl"
または"Accept-Language: en"
が@locale
が:nl
または:en
のいずれかであることになりますと言うのに十分です。
私はetagとif-modifiedでこれを使用したいと思います。 fresh_whenは、異なる言語を要求するときにキャッシュされた応答を返しません。ようなので:
get /balances/mine, {}, { "Accept-Language" => "en" }
#=>応答200 OKget /balances/mine, {}, { "Accept-Language" => "en", "If-None-Match" => previous_response.headers["ETag"] }
#=>応答304変更されないget /balances/mine, {}, { "Accept-Language" => "nl", "If-None-Match" => previous_response.headers["ETag"] }
#=>応答200 OKget /balances/mine, {}, { "Accept-Language" => "nl", "If-None-Match" => previous_response.headers["ETag"] }
#=>応答304は、 を改変しません
したがって、応答はキャッシュされ、ロケールがキャッシュされたバージョンと一致する場合にのみ304として返されます。
cache()
ブロックでは、Railsでのフラグメントキャッシングを使用して、adding a locale is simple。 fresh_when
メソッドで同じようにするにはどうすればよいですか?