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

时间:2015-05-07 11:20:35

标签: ruby-on-rails ruby ruby-on-rails-2

我有一个名为" Pages"大约5页(视图),我已经渲染了一个名为" page.html.erb"的布局。 所以我的" Pages"控制器有:

class PagesController < ApplicationController
layout 'page' 

我想要我的&#34; page.html.erb&#34;要使用的布局&#34; application.html.erb&#34;默认情况下。如何制作自定义布局&#34; page.html.erb&#34;自动拥有&#34; application.html.erb&#34;继承/渲染在其中?

3 个答案:

答案 0 :(得分:4)

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

默认情况下,控制器操作将呈现其相应的视图。例如,如果控制器foo中有操作bars_controller.rb,则除非您重定向或指定要在操作中呈现的其他视图,否则Rails将呈现/app/views/bars/foo.html.erb。事实上,如果您要执行的所有动作foo都是渲染页面,您甚至不需要在控制器中定义操作!

约会超过配置我的朋友。

答案 1 :(得分:3)

我通常将布局拆分为较小的部分(页眉,页脚,HTML HEAD等)。这样我可以通过将不同的部分组合在一起来使用多个布局。

答案 2 :(得分:0)

我也遇到了类似的挑战,但我希望我的主页其他页面具有略微不同的标题

这是我的工作方式

我要做的就是在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 params[:controller] == 'homes' %>
  <%= render partial: '/shared/home_header' %>
<% elsif params[:controller] != 'homes' %>
  <%= render partial: '/shared/other_header' %>
<% else %>
<% end %> 

steve klein感谢您的评论,这使我对此有所了解。

仅此而已。

我希望这会有所帮助