ナビゲーションバーを配置する場所に_header.html.erbパーシャルがあります
起動ページにナビゲーションバーを表示したくありません。
これはapplication.html.erbのbody
です
<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
my_controller
before_filter :disable_nav, only: [:landing_page]
そのロジックは、スタイルシート、コントローラー、またはビューに配置できます(この最後のロジックは、コントローラー全体にのみ適用されます)。
スタイルシートにロジックを追加する場合は、最初に次のクラスをbodyタグに追加します。
<body class="<%= "#{controller.controller_name} #{controller.action_name}" %>">
次に、cssに次のようなものを追加します。
body.controller.action .navbar {
display: none;
}
このロジックをコントローラーに追加するには、アプリケーションコントローラーにbeforeフィルターを追加します。
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
特定のコントローラーでの特定のアクションに異なるレイアウトを設定します。