web-dev-qa-db-ja.com

特定のアクションを除くすべてを部分的にレンダリングする方法

ナビゲーションバーを配置する場所に_header.html.erbパーシャルがあります

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

これはapplication.html.erbのbodyです

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

</body>

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

26
Nick Ginanto

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

<%= 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]
62
Damien Roche

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

スタイルシート

スタイルシートにロジックを追加する場合は、最初に次のクラスを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.erbapp/views/controller_nameに追加します。

このオプションを機能させるには、少なくともRails 3.1

6
Serabe

特定のコントローラーでの特定のアクションに異なるレイアウトを設定します。

0
Abhay Kumar