28

navbar を置く場所に _header.html.erb パーシャルがあります

起動ページにナビゲーション バーを表示したくありません。

これはbodyapplication.html.erb の

<body>
<%= render 'layouts/header' %>
<div id="container">
    <%= yield %>
</div>

</body>

特定のコントローラーでの特定のアクションを除くすべてのアクションでレンダリングするにはどうすればよいですか?

4

3 に答える 3

66

レンダリングを次のように置き換えます。

<%= 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]
于 2012-11-15T10:49:47.830 に答える
7

そのロジックは、スタイルシート、コントローラー、またはビューに配置できます (この最後のものは、コントローラー全体のみ)。

スタイルシート

スタイルシートにロジックを追加する場合は、最初に 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' %>

最後に、navbar のないコントローラーでは、空_header.html.erbをに追加しますapp/views/controller_name

このオプションが機能するには、少なくとも Rails 3.1 が必要です。

于 2012-11-15T10:19:16.530 に答える
0

特定のコントローラーでこれらの特定のアクションに対して別のレイアウトを設定します。

于 2012-11-15T10:18:26.657 に答える