Вопрос по ruby-on-rails-3, content-for, partial, render – как сделать частичное на все, кроме определенного действия

25

У меня есть частичный _header.html.erb, где я положил свою панель навигации

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

этоbody of application.html.erb




    



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

Ваш Ответ

3   ответа
6

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

Stylesheets

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

">

Затем в вашем 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

Тогда, если вы неЧтобы показать Navbar в 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

0

ых контроллерах.

Учитывая, что есть так много повторений (все, кроме заголовка), я бы нене считаю это. Serabe
вы можете иметь условие if вокруг частичного заголовка, которое будет запускаться каждый раз по умолчанию, за исключением конкретного условия. Abhay Kumar
Тогда этоне другой макет. Serabe
Вы не отличаетесь от макета, если вы считаете необходимым проверить наличие заголовка или нет. Abhay Kumar
59

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

Тогда вы можете просто установитьdisable_nav в любое действие контроллера, которое вам нравится:

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]
Спасибо хорошее решение Sagar Pednekar
используйте before_action вместо before_filter с Rails> 4 hook38
Вы также можете сделать=render partial: "layouts/header" unless current_page?(landing_page_url) Brian

Похожие вопросы