Nic*_*nto 26 render partial content-for ruby-on-rails-3
我有一个_header.html.erb部分,这是我放置导航栏的地方
在我的启动页面上,我不想显示导航栏.
这是bodyapplication.html.erb
<body>
<%= render 'layouts/header' %>
<div id="container">
<%= yield %>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
如何在除特定控制器上的特定操作之外的每个操作上呈现它?
Dam*_*che 62
用这个替换你的渲染:
<%= render 'layouts/header' unless @disable_nav %>
Run Code Online (Sandbox Code Playgroud)
然后,您可以disable_nav在任何您喜欢的控制器操作中设置为true:
def landing_page
@disable_nav = true
end
Run Code Online (Sandbox Code Playgroud)
作为一个before_filter,我鼓励上述:
application_controller.rb
def disable_nav
@disable_nav = true
end
Run Code Online (Sandbox Code Playgroud)
my_controller
before_filter :disable_nav, only: [:landing_page]
Run Code Online (Sandbox Code Playgroud)
您可以将该逻辑放在样式表,控制器或视图中(最后一个,仅适用于整个控制器).
如果要在样式表中添加逻辑,请首先在body标签中添加以下类:
<body class="<%= "#{controller.controller_name} #{controller.action_name}" %>">
Run Code Online (Sandbox Code Playgroud)
然后,在你的CSS中,添加如下内容:
body.controller.action .navbar {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
要将此逻辑添加到控制器,请将before filter添加到应用程序控制器:
class ApplicationController < ActionController::Base
before_filter :show_navbar
protected
def show_navbar
@show_navbar = true
end
end
Run Code Online (Sandbox Code Playgroud)
然后,如果您不想在CarsController中显示导航栏,请执行以下操作:
class CarsController < ApplicationController
skip_before_filter :show_navbar, only: [list, of, actions]
end
Run Code Online (Sandbox Code Playgroud)
[list, of, actions]您不想在其中显示导航栏的操作在哪里.
最后,将布局更改为如下所示:
<% if @show_navbar -%>
<%= render 'layouts/header' %>
<% end -%
Run Code Online (Sandbox Code Playgroud)
如果要禁用整个控制器的标头,首先,将标头移动到app/views/application/并将渲染更改为:
<%= render partial: 'header' %>
Run Code Online (Sandbox Code Playgroud)
最后,在那些没有导航栏的控制器中,添加一个空_header.html.erb的app/views/controller_name.
要使此选项起作用,您至少需要Rails 3.1
| 归档时间: |
|
| 查看次数: |
11934 次 |
| 最近记录: |