以下是我们的Rails 4应用程序的_header.html.erb
,使用Bootstrap 3组件制作:
<header class="navbar navbar-fixed-top navbar-inverse">
<div class="container">
<nav>
<div class="col-xs-4">
<%= link_to "APP NAME", root_path, id: "logo" %>
</div>
<div class="col-xs-4 text-center">
<ul class="nav navbar-nav navbar-center">
<li><%= link_to "Features", features_path %></li>
<li><%= link_to "Pricing", pricing_path %></li>
<li><%= link_to "Blog", '#' %></li>
</ul>
</div>
<div class="col-xs-4">
<ul class="nav navbar-nav navbar-right">
<% if current_user.try(:admin?) %>
<li><%= link_to "Users", users_path %></li>
<% end %>
<% if logged_in? %>
<li><%= link_to "Dashboard", current_user %></li>
<li><%= link_to "Settings", current_user %></li>
<li><%= link_to "Log out", logout_path, method: "delete" %></li>
<% else %>
<li><%= link_to "Log in", login_path %></li>
<li><%= link_to "Sign up", signup_path %></li>
<% end %>
</ul>
</div>
</nav>
</div>
</header>
如您所见,这会有条件地显示导航栏,具体取决于当前用户是以注销,登录还是以管理员身份登录。
但是,我们想知道如何在不同的页面上显示不同的导航栏。
例如,在所有公开页面(主页,功能,定价,博客,帮助等)上,我们希望显示Features
,Pricing
&amp; Blog
链接(无论用户是否登录),但在应用程序的内页(仪表板,设置等)上,我们要删除这些链接。
static_pages
,它依赖于我们的StaticPages#Controller
,而内置应用页面(如仪表板和设置)依赖于我们的Users#Controller
1}}。
我们怎样才能做到这一点?我们是否需要创建新的_header.html.erb
部分?
有没有特定的Rails方法呢?
答案 0 :(得分:11)
您可以将导航栏的每个变体放在其中,并使用content_for
。
在您的应用程序布局中,您可以使用逻辑来检查是否应该呈现特定的导航栏,如下所示:
<% if content_for?(:navbar) %>
<%= yield(:navbar) %>
<% else %>
# code for default navbar
<% end %>
在您的观看中,您需要不同的导航栏
<% content_for :navbar do %>
<%= render 'nav_bar_variation_one' %>
<% end %>
和
<% content_for :navbar do %>
<%= render 'nav_bar_variation_two' %>
<% end %>
答案 1 :(得分:0)
在我的情况下,我想要一个不同的字体颜色为我的导航栏。 因此创建其他导航栏太复杂了。
这是我的解决方案:
我创建了一个新的方法,它将返回&#39; black-navbar&#39;如果我进入我的orders_controller或&#39; white-navbar&#39;在其他情况下。
#my code into application_helper.rb
def navbar_attr
if %w(orders).include?(params[:controller])
return 'black-navbar'
else
return 'white-navbar'
end
end
然后我将这个方法称为导航栏的html
# in my case my file is _navbar.html.erb
<p class="<%= navbar_attr %>">Hello</p>
如果通过我的orders_controller调用我的导航栏,则会添加类&#39; black-navbar&#39;在其他情况下,它会添加&#39; white-navbar&#39;。