如何根据不同页面动态切换Ruby on Rails 4与Bootstrap 3的导航栏样式?

2026-04-10 07:061阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计640个文字,预计阅读时间需要3分钟。

如何根据不同页面动态切换Ruby on Rails 4与Bootstrap 3的导航栏样式?

这是我们的Rails 4应用程序的`_header..erb`文件,使用了Bootstrap 3组件制作头部:

这是我们的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>

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

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

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

编辑:为了使事情更清楚,我们称之为公共页面的实际上是我们的static_pages,它依赖于我们的StaticPages#Controller,而内部应用程序页面(如仪表板和设置)依赖于我们的用户#Controller.

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

有没有特定的Rails方法呢?

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

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

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

在您的视图中,您需要不同的导航栏

如何根据不同页面动态切换Ruby on Rails 4与Bootstrap 3的导航栏样式?

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

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

本文共计640个文字,预计阅读时间需要3分钟。

如何根据不同页面动态切换Ruby on Rails 4与Bootstrap 3的导航栏样式?

这是我们的Rails 4应用程序的`_header..erb`文件,使用了Bootstrap 3组件制作头部:

这是我们的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>

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

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

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

编辑:为了使事情更清楚,我们称之为公共页面的实际上是我们的static_pages,它依赖于我们的StaticPages#Controller,而内部应用程序页面(如仪表板和设置)依赖于我们的用户#Controller.

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

有没有特定的Rails方法呢?

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

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

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

在您的视图中,您需要不同的导航栏

如何根据不同页面动态切换Ruby on Rails 4与Bootstrap 3的导航栏样式?

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

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