Rails 4 / Bootstrap 3: how to display a different navigation bar on different pages? -
here _header.html.erb
of our rails 4 app, made bootstrap 3 components:
<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>
as can see, conditionally displays navigation bar, depending on whether current user logged out, logged in or logged in admin.
however, wondering how display different navigation bar on different pages.
for instance, on public pages (home, features, pricing, blog, help, etc.), display features
, pricing
& blog
links (whether user logged in or not) on inner pages of app (dashboard, settings, etc) remove these links.
edit: make things clearer, call public pages our static_pages
, rely on our staticpages#controller
, while inner app pages such dashboard , settings rely on our users#controller
.
how can achieve this? need create new _header.html.erb
partial?
is there particular rails way that?
you put each variation of navbar in it's own partial , make use of content_for
.
in application layout have logic checks if specific navbar should rendered, this:
<% if content_for?(:navbar) %> <%= yield(:navbar) %> <% else %> # code default navbar <% end %>
and inside views, want different navbars
<% content_for :navbar %> <%= render 'nav_bar_variation_one' %> <% end %>
and
<% content_for :navbar %> <%= render 'nav_bar_variation_two' %> <% end %>
Comments
Post a Comment