Rails 4 / Bootstrap 3:如何在不同的页面上显示不同的导航栏?

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

  

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

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

例如,在所有公共页面(家庭,function,定价,博客,帮助等)上,我们希望显示FeaturesPricingBlog链接(无论用户是否登录),但在内页上应用程序(仪表板,设置等)我们想要删除这些链接。

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

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

有没有特定的Rails方法呢?

您可以将导航栏的每个变体放在它自己的部分中并使用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 %> 

在我的情况下,我想要一个不同的字体颜色为我的导航栏。 因此创建其他导航栏太复杂了。

我的解决方案:

我创建了一个新的方法,如果我进入我的orders_controller或其他情况下的’white-navbar’,它将返回’black-navbar’。

 #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  

如果通过我的orders_controller调用我的导航栏,则会在其他情况下添加“black-navbar”类,它将添加“white-navbar”。

Interesting Posts