繁体   English   中英

Rails - 如何在我的自定义布局中使用 application.html.erb?

[英]Rails - How do I use application.html.erb in my custom layout?

我有一个名为“Pages”的控制器,其中包含大约 5 个页面(视图),我为其呈现了一个名为“page.html.erb”的布局。 所以我的“页面”控制器有:

class PagesController < ApplicationController
layout 'page' 

我希望我的“page.html.erb”布局默认使用“application.html.erb”。 如何让我的自定义布局“page.html.erb”自动继承/呈现“application.html.erb”?

如果您没有在控制器中指定布局,Rails 将默认呈现您的application布局。 如果您遵循此约定,则可以将application.html.erb用于整个站点页面结构(也是包含样式表和 javascript 的好地方)。 然后,您可以在布局中使用= yield来指定应呈现控制器视图的位置。

默认情况下,控制器操作将呈现其相应的视图。 例如,如果你在控制器bars_controller.rb有一个动作foo ,Rails 将呈现/app/views/bars/foo.html.erb除非你重定向或指定不同的视图来呈现在动作中。 事实上,如果你想要在操作foo做的只是渲染页面,你甚至不需要在控制器中定义操作!

我的朋友,约定优于配置。

我通常将我的布局分成更小的部分(页眉、页脚、HTML HEAD 等)。 这样我就可以通过将不同的部分混合在一起来使用多个布局。

我和你有类似的挑战,但我希望我的主页其他页面的标题略有不同。

这是我的工作方式

我所要做的就是在app/views/shared目录中创建 2 个标题部分:

_home_header.html.erb
_other_header.html.erb

然后我在app/views/layouts/application.html.erb文件中以这种方式引用它:

<%= render partial: '/shared/home_header' if params[:controller] == 'homes' %>
<%= render partial: '/shared/other_header' if params[:controller] != 'homes' %>

也可以使用显式 if 条件以这种方式引用它:

<% if params[:controller] == 'homes' %>
  <%= render partial: '/shared/home_header' %>
<% elsif params[:controller] != 'homes' %>
  <%= render partial: '/shared/other_header' %>
<% else %>
<% end %> 

感谢steve klein的评论,让我深入了解了这一点。

就这样。

我希望这有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM