我有一个 _header.html.erb 部分,这是我放置导航栏的地方
在我的启动页面上,我不想显示导航栏。
这是body
application.html.erb 的
<body>
<%= render 'layouts/header' %>
<div id="container">
<%= yield %>
</div>
</body>
除了特定控制器上的特定操作之外,如何在每个操作上呈现它?
我有一个 _header.html.erb 部分,这是我放置导航栏的地方
在我的启动页面上,我不想显示导航栏。
这是body
application.html.erb 的
<body>
<%= render 'layouts/header' %>
<div id="container">
<%= yield %>
</div>
</body>
除了特定控制器上的特定操作之外,如何在每个操作上呈现它?
用这个替换你的渲染:
<%= render 'layouts/header' unless @disable_nav %>
然后,您可以disable_nav
在任何您喜欢的控制器操作中简单地设置为 true:
def landing_page
@disable_nav = true
end
作为一个before_filter
,我会在上面鼓励:
application_controller.rb
def disable_nav
@disable_nav = true
end
我的控制器
before_filter :disable_nav, only: [:landing_page]
您可以将该逻辑放入样式表、控制器或视图中(最后一个,仅适用于整个控制器)。
如果您想在样式表中添加逻辑,请首先将以下类添加到您的 body 标记中:
<body class="<%= "#{controller.controller_name} #{controller.action_name}" %>">
然后,在您的 css 中,添加如下内容:
body.controller.action .navbar {
display: none;
}
要将此逻辑添加到您的控制器,请在您的应用程序控制器中添加一个前置过滤器:
class ApplicationController < ActionController::Base
before_filter :show_navbar
protected
def show_navbar
@show_navbar = true
end
end
然后,如果您不想在 CarsController 中显示导航栏,请执行以下操作:
class CarsController < ApplicationController
skip_before_filter :show_navbar, only: [list, of, actions]
end
[list, of, actions]
您不想在其中显示导航栏的操作在哪里。
最后,将布局更改为如下所示:
<% if @show_navbar -%>
<%= render 'layouts/header' %>
<% end -%
如果要禁用整个控制器的标头,首先,将标头移动到app/views/application/
并将渲染更改为:
<%= render partial: 'header' %>
最后,在那些没有导航栏的控制器中,_header.html.erb
在app/views/controller_name
.
要使此选项起作用,您至少需要 Rails 3.1
我会为特定控制器上的特定操作设置不同的布局。