如何隐藏或删除菜单项?

How can I hide or remove a menu item?

我有以下创建导航项列表(菜单)的代码片段:

<ul class="nav">
  <li><%= link_to "Log in", login_path %></li>
  <li><%= link_to "Help", help_path %></li>
  <% if logged_in? %>
  <li><%= link_to "Home", root_path %></li>
</ul>

未登录时,菜单显示为:

Log in Help

当我登录时,它显示为

Log in Help Home

登录后,我想:

  1. 隐藏或删除 log in 菜单项和
  2. 重新排列剩余的菜单项,使 Home 排在第一位,Help 排在第二位。

你可以做一个 if else 语句来帮助你。

<ul class="nav">
  <% if logged_in? %>
    <li><%= link_to "Home", root_path %></li>
  <% else %>
    <li><%= link_to "Log in", login_path %></li>
    <li><%= link_to "Help", help_path %></li>
  <% end %>
</ul>

你只要把它们安排好,用好条件就可以了

<ul class="nav">
  <% if logged_in? %>
    <li><%= link_to "Home", root_path %></li>
  <% else %>
    <li><%= link_to "Log in", login_path %></li>
  <% end %>
  <li><%= link_to "Help", help_path %></li>
</ul>

解释:

第一个 if-else 检查是否有登录用户,如果登录,将 return <li> HomeLog在 如果没有登录

无论用户是否登录,最后一个 <li> 将始终显示

以上答案是正确的,但是它的旧方法,你可以在没有 if else 条件的情况下进行。 rails 提供内置 link_to_unless 助手。 请检查以下代码。 您可以根据自己的需要安排菜单。

未测试

<ul class="nav">
  <li><%= link_to_unless(logged_in?, 'Log in', login_path){} %></li>
  <li><%= link_to "Home", root_path %></li>
  <li><%= link_to "Help", help_path %></li>
</ul>

如果它不起作用请告诉我