Подтвердить что ты не робот

Как оказывать частичное на все, кроме определенного действия

У меня есть частичка _header.html.erb, в которой я помещаю свой навигатор

на моей странице запуска. Я не хочу отображать навигационную панель.

это body application.html.erb

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

</body>

Как мне отображать его при каждом действии, кроме определенных действий на определенных контроллерах?

4b9b3361

Ответ 1

Замените рендер следующим образом:

<%= render 'layouts/header' unless @disable_nav %>

Затем вы можете просто установить disable_nav в значение true в любом действии контроллера:

def landing_page
  @disable_nav = true
end

Как a before_filter, о котором я бы посоветовал выше:

application_controller.rb

def disable_nav
  @disable_nav = true
end

my_controller

before_filter :disable_nav, only: [:landing_page]

Ответ 2

Вы можете поместить эту логику в свои таблицы стилей, в свой контроллер или в свои представления (этот последний, только для целых контроллеров).

Stylesheets

Если вы хотите добавить логику в свои таблицы стилей, сначала добавьте в свой тег тела следующие классы:

<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' %>

Наконец, в этих контроллерах без navbar добавьте пустой _header.html.erb в app/views/controller_name.

Для этой опции вам нужно как минимум Rails 3.1

Ответ 3

Я бы установил другой макет для этих конкретных действий на определенных контроллерах.