3

キャッシュ ダイジェストを使用して Rails でパーシャルをキャッシュする場合、パーシャルの条件付きロジックはどのように処理されますか? 完全なテンプレートをキャッシュし、後で条件を適用して、適切な json/html を適切なユーザーに提供できるようにしますか?

4

1 に答える 1

1

完全なテンプレートをキャッシュし、後で条件を適用して、適切な json/html を適切なユーザーに提供できるようにしますか?

質問のこの部分は私には少し不明確に思えるので、「条件」が何であるかに基づいてさまざまなオプションを提供します。

まず第一に、キャッシュ ダイジェストは @variables の状態に基づく内部条件を考慮しません (特定の状態がそのキャッシュ キー内で言及されていない限り)。次の例を検討してください。

# users.haml
.welcome_block
  - if @user.admin?
    %h4 Hello, admin!
  - else
    %h4 Hello, user!

を使用してページ全体にキャッシュを適用する場合cache ['users_haml']、キャッシュは一度だけ生成されます (いずれかのロールを持つ最初のユーザーに対して)。後でこのページにアクセスしたh4ユーザーには、最初のユーザーに表示されたものと同じグリーティングが表示されます。ここでの理由は、メソッドに証明されたdigestfor stringは、状況に関係なく常に同じだからです。users_hamlcache

一方、cache @userわずかに異なる動作を提供します。ページを開く各ユーザーにusers.hamlは、その役割に基づいて適切な挨拶が表示されます。この動作の理由はdigest、 type のすべてのオブジェクトで異なるため、 N 人のユーザーに対して N 個のキャッシュ ページが生成されるためですUsercache_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_digests10月生まれの人はキャッシュを無効にするべきだと(条件文から)どう理解する?

ここでの答えは、それがまったくわからないということです。それが知っている唯一のことは、 と の両方に依存users.hamlしているため、これらの内部パーシャルのいずれかを変更すると、ユーザーの生年月に関係なく、すべてのページ キャッシュが無効になります。partial_onepartial_twousers.haml

于 2014-10-01T13:22:34.033 に答える