1

何時間も見回し、ブログや他の多くのSOの質問を読んで成功しなかったので、ついに助けを求めるようになりました.

Rails のレイアウト/レンダリング/収量のメカニズムについて、まだ理解が不足していると思います。したがって、これは愚かな質問かもしれません。何とおっしゃいましたか。

すべてのページ要求でパーシャルがレンダリングされないようにすることは可能ですか? つまり、アプリのリンクをクリックするたびに、レイアウトとパーシャルがリロードされます。

私の目標は、ある程度静的なサイドバーを作成し、「最初に application.html.erb がロードされたとき」の部分をレンダリングして一度入力し、次に ajax のみを使用して更新することです。

これが私のアプリのレイアウトです:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= content_for?(:title) ? yield(:title) : "GEN" %></title>
    <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "GEN" %>">
    <%= stylesheet_link_tag "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
  </head>
  <body class="darkbody">
    <header class="navbar navbar-fixed-top navbar-inverse">
      <nav class="navbar-inner">
        <div class="container-fluid">
          <%= render 'layouts/navigation' %>
        </div>
      </nav>
    </header>
    <main role="main">
      <div class="container-fluid">

         <div class="row-fluid">
          <div class="span3">

            <%= render partial: 'charts/dashboard', layout: false %>

          </div>

          <div class="span9">
            <div class="well well-small">
              <%= render 'layouts/messages' %>

              <%= yield %>  

            </div>
          </div>

        </div>

      </div>
    </main>
  </body>

</html>

「ダッシュボード」パーシャルは一度読み込まれ、再度レンダリングされることはありません。つまり、アプリをナビゲートすると、yield セクションのコンテンツが変更/更新されますが、メイン レイアウトの「部分」では変更されません。

動機は?ダッシュボードはヘルパー メソッドを使用して、計算され、ユーザー セッション全体で更新されることのない値を表示します。何度もリロードすると、ユーザーがクリックするたびにこのヘルパーが実行され、同じ結果が返されたとしてもアプリ サーバーに負荷がかかります。

これはあまりにもクレイジーですか、それともばかげていますか?

よろしくお願いします、

広告

4

1 に答える 1

2

実際には、リクエストごとにこのテンプレートから HTML をレンダリングしますが、テンプレートに表示されるデータが常に実際のものである必要がない場合は、次のようにアクションまたはフラグメント キャッシュを試すことができます。

  <div class="span3">
    <% cache 'dashboard' do %>
      <%= render partial: 'charts/dashboard', layout: false %>
    <% end %>
  </div>

詳細については、レール ガイド ( http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching )を参照してください。

于 2013-10-28T22:32:16.413 に答える