2016-09-25 1 views
0

ВОПРОС: Для производства, что было бы эффективным условным заявлением, чтобы скрыть определенные элементы макета (navbar/footer) на root_path?Для производства, что было бы эффективным условным заявлением, чтобы скрыть некоторые элементы макета (navbar/footer) на root_path?

Я разместил аналогичный вопрос here. Прошу прощения, если это кажется дублируется, но этот вопрос отличается тем, что я конкретно хочу условный оператор, чтобы удалить часть макета (а не весь файл)

Я надеюсь, что все это имеет смысл, имея дело с нубом здесь

Я пробовал:

if current_page?(root_path) 
    # your html 
end 

application.html.erb (обновленную версию ниже)

<!DOCTYPE html> 
<html lang="en"> 
<head> 

<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<meta name="description" content=""> 
<meta name="keywords" content=""> 
<meta name="author" content=""> 

<!--Google Fonts--> 
<link href="https://fonts.googleapis.com/css?family=Quicksand|Raleway:600" rel="stylesheet"> 

<%= stylesheet_link_tag 'application', media: 'all' %> 
<%= javascript_include_tag 'application' % 
<%= csrf_meta_tags %> 

</head> 
<body> 

<!--Navbar/Footer--> 
<% if current_page?(root_path) %> 
    #NAVBAR 
    #FOOTER 
<% end %>** 

<!--Javascript--> 
<script> 
$(document).ready(function(){ 
    $('[data-toggle="tooltip"]').tooltip(); 
}); 
</script> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">  </script> 

</body> 
</html> 

UPDA Ted application.html.erb

<% if current_page?(root_path) %> 
<body> 
    <div class="container"> 
    <div class="content"> 
    <%= yield %> 
    </div> 
    </div> 
</body> 
<% else %> 
<body> 
    <!--Header--> 
    <%= render 'shared/header' %> 
    <!--Content--> 
    <div class="container"> 
    <div class="content"> 
    <%= yield %> 
    </div> 
    </div> 
    <!--Footer--> 
    <%= render 'shared/footer' %> 
    </body> 
<% end %> 

Добавить Navbar в приложение/просмотров/общий/header.html.erb

Добавить колонтитула в приложение/просмотров/общий/footer.html.erb

+0

Что вы пробовали? (то есть, что вы узнали из ответа на ваш другой вопрос)? :) –

+0

Показать ваше приложение.html.erb – luissimo

ответ

3

Как я не могу видеть ваше application.html.erb плохо дать пример:

Внутри ваш application.html.erb делают 2 тела и сделать одно шоу на корневой странице, а другой на всех О.Т. ее страницы, как это:

<% if current_page?(root_path) %> 
    <body> 
    <div class="container"> 
     <div class="content"> 
     <%= yield %> 
     </div> 
    </div> 
    </body> 
<% else %> 
    <body> 
    <%= render 'shared/header' %> 
    <div class="container"> 
     <div class="content"> 
     <%= yield %> 
     </div> 
    </div> 
    <%= render 'shared/footer' %> 
    </body> 
<% end %> 

Это при условии, что у вас есть верхние и нижние колонтитулы, как частичные внутри папки app/views/shared

+0

Применяя ваше предположение, я создал общую папку в своих представлениях. Я разделил заголовок и нижний колонтитул на файлы с именем: header.html.erb & footer.html.erb. Затем я применил ваше решение к своему файлу application.html.erb. Теперь я получаю следующую ошибку: ActionView :: MissingTemplate в Devise :: Sessions # new. Какие-либо дополнительные рекомендации, которые вы хотите поделиться? –

+0

Это будет хорошо работать, но это облом, чтобы дублировать так много! Вероятно, лучше иметь два 'if' s, один вокруг каждого 'render'. О недостающей ошибке шаблона - имена файлов для частичных файлов должны начинаться с подчеркивания, например «_header.html.erb» и «_footer.html.erb». – gmcnaughton

+1

Проблема решена с использованием решения luissimo, но с изменениями @ gmcnaughton. Я не добавлял ничего (буквально пустое) между if & else, но включал частичные рендеринг между else & end. –