[英]Rails 3: How can specify a layout to use for a specific method, but use the default application.html.erb otherwise?
[英]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.