我想展示两个不同的导航栏。当您登录时,将在除主页之外的所有页面上显示一个。而另一个导航栏将显示在我的登录页面上。
我想我可能需要写一个if语句。
If (current user is not logged in) or maybe (current user is viewing home page) do
<nav>Second navbar</nav>
else
<nav>First navbar</nav>
end
我对rails很新,所以我错了。 (是的,我知道不是如何在Ruby中正确编写if语句)
主页位于:
家/ index.html.erb
答案 0 :(得分:2)
我通常会做以下设置:
shared/_nav_menu.html.erb
在局部内部我把逻辑放在:
<% if current_user %>
// nav bar for logged in user
<% else %>
// nav bar for non logged in users
<% end %>
然后在application.html.erb
文件中我像这样渲染partial
:
<%= render :partial => 'shared/_nav_menu' if show_menu? %>
在我的application_controller
内,我按照这样的逻辑:
def show_menu?
true
end
helper method: show_menu?
如果我不想显示static_pages
的菜单,那么在static_pages_controller
内,我会覆盖show_menu?
方法以返回false
。
class StaticPagesController < ApplicationController
def show_menu?
false
end
helper_method: show_menu?
end
您不必完全使用此设置,但我喜欢此设置,因为我的nav menu
逻辑部分保持独立。 nav menu
所需的所有逻辑都存在于此文件中。
这种方法不会使我的application.html.erb
文件膨胀很多if..else
。
答案 1 :(得分:1)
在两个菜单的情况下,但是让自己开放更多,我会使用与Reboot的答案相似但略微不同的方法。
在布局中:
<%= render :partial => @nav_bar_partial %>
然后在我的应用程序控制器中,定义默认导航:
def standard_nav
@nav_bar_partial = "path/to/standard/nav/partial"
end
从那里,您可以随时从控制器覆盖导航部分(您想要的任何部分)
@nav_bar_partial = "path/to/new/nav/partial" if condition_that_requires_a_different_nav
这样,你就有了更多的灵活性。如果由于某种原因你想为其他条件添加第三个导航栏,你可以在不改变任何上述代码的情况下覆盖其他部分。
答案 2 :(得分:0)
您可以准备两个布局,一个用于着陆页,另一个用于其余页面。请查看官方文档:http://guides.rubyonrails.org/layouts_and_rendering.html。