在Rails中嵌套布局
是否可以在Rails 3.2中嵌套布局? 我想创建application.html.erb使用的通用布局,并允许应用程序中的几个视图使用它。 我找到了嵌套布局rubygem,但它在四年内没有更新。 如果我可以在application.html.erb文件中执行以下操作,那将是非常棒的:
我在这篇博文中找到了一个简单的解决方案。
在我的ApplicationHelper
,我添加了以下内容:
def parent_layout(layout) @view_flow.set(:layout, output_buffer) self.output_buffer = render(:file => "layouts/#{layout}") end
在application.html.erb中,我添加了:
<% parent_layout 'html5_boilerplate' %>
我尝试了其中的一些,但没有一个在Rails 4中对我有效。但是从nested_layouts gem中获得一些灵感,我想出了以下简单的修复:
module ApplicationHelper def inside_layout(layout, &block) layout = "layouts/#{layout}" unless layout =~ %r[\Alayouts/] content_for :content, capture(&block) render template: layout end end
然后我将layouts/application.html.erb
模板修改为类似于:
<%= content_for?(:content) ? yield(:content) : yield %>
现在我可以声明一个这样的嵌套布局:
# app/views/layouts/blog.html.erb <%= inside_layout 'application' do %> <%= yield %> <% end %>
希望这可以帮助!
您可以使用官方Rails指南中描述的content_for
方法。
AFAIK您的应用程序布局将包围您应用中的所有内容。 所以,只需将这些局部内容构建到您在各个视图级别上的关系中。
我有一个人物对象,模型的其他部分包含在他们的部分渲染中,如下所示。 它并不漂亮,但它有望与你想要完成的事情保持一致。