ruby-on-rails – 在Rails中扩展现有布局

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在Rails中扩展现有布局前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有我的主应用程序布局,但后来我的网站的/ 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方法为该产量添加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' %>

Further reading

如果您希望将收益率保持在最小值,则可以嵌套布局.

视图/布局/ 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

猜你在找的Ruby相关文章