如何防止在每个页面请求中重新呈现/更新主布局中的部分?

时间:2013-10-28 21:56:04

标签: ruby-on-rails layout render partials

环顾四个小时,阅读博客和许多其他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部分中的内容,但不会更改/刷新主要布局“partials”中的内容。

动机?仪表板使用辅助方法显示在整个用户会话中计算且永不更新的值。如果我得到很多重新加载,这个助手会在每次用户点击时运行并强调应用服务器,即使返回相同的结果,确实会发生什么。

这太疯狂还是愚蠢?

致以最诚挚的问候,

AD

1 个答案:

答案 0 :(得分:1)

实际上,它会在每个请求中从此模板呈现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

中阅读更多详细信息