环顾四个小时,阅读博客和许多其他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
答案 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)
中阅读更多详细信息