我有_header.html.erb部分,这是我放置导航栏的地方
在我的启动页面上,我不想显示导航栏。
这是application.html.erb的body
<body>
<%= render 'layouts/header' %>
<div id="container">
<%= yield %>
</div>
</body>
如何在除特定控制器上的特定操作之外的每个操作上呈现它?
答案 0 :(得分:61)
用以下内容替换渲染:
<%= 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
<强> my_controller 强>
before_filter :disable_nav, only: [:landing_page]
答案 1 :(得分:6)
您可以将该逻辑放在样式表,控制器或视图中(最后一个,仅适用于整个控制器)。
如果要在样式表中添加逻辑,请先在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
答案 2 :(得分:0)
我会为特定控制器上的特定操作设置不同的布局。