Я - младенец, когда речь заходит о Ruby и Rails, и все еще нужно изучать все, но у меня есть один маленький предмет, с которым мне нужна помощь сегодня.
Я работаю над заголовком веб-сайта, который использует HAML, и мне нужно изменить имя класса <div>
на основе страницы, которая его использует.
Вот вопрос:
Если это приветствуется.html.haml, мне нужен div в header.html.haml:
.navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"}
Для всех других страниц мне нужен тот же самый div в header.html.haml:
.navbar.navbar-inverse.navbar-static-top{:role => "navigation"}
Я надеялся использовать что-то вроде:
- if <PAGE IS> == 'welcome.html.haml'
.navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"}
- else
.navbar.navbar-inverse.navbar-static-top{:role => "navigation"}
Я просто не знаю, какое условие я могу ему дать. Мне нужна помощь с частью <PAGE IS>
.
Или, если есть более простое решение, я все уши.
РЕДАКТИРОВАТЬ:
Вот что я пробовал, но получаю ошибки повсюду:
- if controller.action_name == 'welcome'
.navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"}
.container
- else
.navbar.navbar-inverse.navbar-static-top{:role => "navigation"}
.container
ДРУГОЕ ИЗМЕНЕНИЕ:
Вы можете получить текущий контроллер и действие с помощью параметров:
if params[:controller] == 'home' && params[:action] == 'welcome'
...
end
РЕДАКТИРОВАТЬ:
Другое решение - передать параметр вашему заголовку. В вашем welcome.html.haml
= render 'header', navbar: :static
И в '_header.html.haml':
<div class="navbar navbar-inverse navbar-<%= local_assigns[:navbar] || 'fixed' %>-top" role="navigation">
ДРУГОЕ ОБНОВЛЕНИЕ:
Конечно, если вы не создаете заголовок в макете, то это совершенно не имеет смысла.
Другим способом сделать это может быть метод content_for
.
#'welcome.html.haml'
content_for(:navbar_class) { 'fixed' }
#'_header.html.haml'
<div class="navbar navbar-inverse navbar-<%= content_for?(:navbar_class) ? yield :navbar_class : 'static' %>-top" role="navigation">
код haml. Это должно сделать это:
%div.navbar.navbar-inverse{(class: (params[:controller] == 'welcome' ? "navbar-fixed-top" : "navbar-static-top")}
.navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"}
Нужно ли мне добавить свой ответ, чтобы он работал?
Illegal nesting: nesting within a tag that already has content is illegal.
= render 'header', navbar: :static
в welcome.html.haml?