ruby-on-rails - rails 4/Bootstrap 3 : how to display a different navigation bar on different pages?

标签 ruby-on-rails twitter-bootstrap ruby-on-rails-4 navbar conditional-statements

这里是 _header.html.erb我们使用 Bootstrap 3 组件制作的 Rails 4 应用程序:

<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>

如您所见,这有条件地显示一个导航栏,具体取决于当前用户是注销、登录还是以管理员身份登录。

但是,我们想知道如何在不同的页面上显示不同的导航栏。

例如,在所有公共(public)页面(主页、功能、定价、博客、帮助等)上,我们希望显示 Features , Pricing & Blog链接(无论用户是否登录),但在应用程序的内页(仪表板、设置等)上,我们希望删除这些链接。

编辑:为了让事情更清楚,我们所说的公共(public)页面实际上是我们的 static_pages , 这依赖于我们的 StaticPages#Controller ,而仪表板和设置等内部应用页面依赖于我们的Users#Controller .

我们怎样才能做到这一点?我们是否需要创建一个新的_header.html.erb部分的?

有没有特定的 Rails 方法可以做到这一点?

最佳答案

您可以将导航栏的每个变体放在它自己的部分中并使用 content_for .

在您的应用程序布局中,您可以具有检查是否应呈现特定导航栏的逻辑,如下所示:

<% if content_for?(:navbar) %>
    <%= yield(:navbar) %>
<% else %>
   # code for default navbar
<% end %>

在您的 View 中,您想要不同的导航栏
 <% content_for :navbar do %>
      <%= render 'nav_bar_variation_one' %>
 <% end %>


 <% content_for :navbar do %>
      <%= render 'nav_bar_variation_two' %>
 <% end %>

关于ruby-on-rails - rails 4/Bootstrap 3 : how to display a different navigation bar on different pages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280230/

相关文章:

css - 需要在 bootstrap 中重新对齐网格的两行内部列

css - 如何扩展现有的 SASS Bootstrap 网格类

mysql - 我的十进制数在创建时会缩短,但在编辑时不会

mysql - 在 Ruby on Rails 中循环 .each

ruby-on-rails - 带颜色输出的工头跑卫

javascript - rails : Turbolinks back to top of page

css - Bootstrap 4 位置固定宽度继承不起作用

ruby-on-rails - OpenURI::HTTPError: 403 Forbidden

ruby-on-rails - ActiveRecord::DangerousAttributeError:卡住?由 Active Record 定义

ruby-on-rails - 测试 Controller 是否呈现 JS 模板