キャッシュ ダイジェストを使用して Rails でパーシャルをキャッシュする場合、パーシャルの条件付きロジックはどのように処理されますか? 完全なテンプレートをキャッシュし、後で条件を適用して、適切な json/html を適切なユーザーに提供できるようにしますか?
1 に答える
完全なテンプレートをキャッシュし、後で条件を適用して、適切な json/html を適切なユーザーに提供できるようにしますか?
質問のこの部分は私には少し不明確に思えるので、「条件」が何であるかに基づいてさまざまなオプションを提供します。
まず第一に、キャッシュ ダイジェストは @variables の状態に基づく内部条件を考慮しません (特定の状態がそのキャッシュ キー内で言及されていない限り)。次の例を検討してください。
# users.haml
.welcome_block
- if @user.admin?
%h4 Hello, admin!
- else
%h4 Hello, user!
を使用してページ全体にキャッシュを適用する場合cache ['users_haml']
、キャッシュは一度だけ生成されます (いずれかのロールを持つ最初のユーザーに対して)。後でこのページにアクセスしたh4
ユーザーには、最初のユーザーに表示されたものと同じグリーティングが表示されます。ここでの理由は、メソッドに証明されたdigest
for stringは、状況に関係なく常に同じだからです。users_haml
cache
一方、cache @user
わずかに異なる動作を提供します。ページを開く各ユーザーにusers.haml
は、その役割に基づいて適切な挨拶が表示されます。この動作の理由はdigest
、 type のすべてのオブジェクトで異なるため、 N 人のユーザーに対して N 個のキャッシュ ページが生成されるためですUser
。cache_digests
頭に浮かぶ最後の 1 種類の条件は、条件付きパーシャル レンダリングに基づくものです。
# users.haml
- cache [@user.month_of_birth]
- if @user.month_of_birth == 'October'
= render 'partial_one'
- else
= render 'partial_two'
したがって、これは生年月日が異なるユーザーに対して正しいキャッシュ ページをレンダリングします。しかし、の内容を変更するとどうなるpartial_one
でしょうか? cache_digests
10月生まれの人はキャッシュを無効にするべきだと(条件文から)どう理解する?
ここでの答えは、それがまったくわからないということです。それが知っている唯一のことは、 と の両方に依存users.haml
しているため、これらの内部パーシャルのいずれかを変更すると、ユーザーの生年月に関係なく、すべてのページ キャッシュが無効になります。partial_one
partial_two
users.haml