我有我的主应用程序布局,但后来我的网站的/ account部分与应用程序布局markupwise具有完全相同的布局,除了/ account页面在布局的内容区域中添加了侧边栏.
我不想公然复制应用程序布局并创建几乎冗余的“帐户”布局,而是扩展应用程序布局,在内容区域添加侧边栏.
所以我的应用程序布局中有这样的东西:
<html> <body> <div id="content"> <%= yield %> </div> </body> </html>
而且我要
<html> <body> <div id="content"> <div id="sidebar"></div> <%= yield %> </div> </body> </html>
有没有办法在不复制代码的情况下实现这一目标?
解决方法
您可以在布局中拥有多个产量,只需为其他产品命名即可:
<html> <body> <div id="content"> <%= yield :sidebar %> <%= yield %> </div> </body> </html>
<% content_for :sidebar do -%> <div id="sidebar"></div> <% end -%>
但是你必须将它添加到你想要有侧边栏的每个视图中.而是创建views / layouts / application_with_sidebar.html.erb
<% content_for :sidebar do -%> <div id="sidebar"></div> <% end -%> <%= render :file => 'layouts/application' %>
如果您希望将收益率保持在最小值,则可以嵌套布局.
视图/布局/ application.html.erb
<html> <body> <div id="content"> <%= yield(:with_sidebar) or yield %> </div> </body> </html>
视图/布局/ application_with_sidebar.html.erb
<% content_for :with_sidebar do -%> <div id="sidebar"></div> <% end -%> <%= render :file => 'layouts/application' %>
控制器/ accounts_controller.rb
class AccountsController < ApplicationController layout 'application_with_sidebar' ... end