2

我正在开发一个 Rails 4 项目,我希望根据当前页面在导航栏上显示不同的链接。这就是我试图设置它的方式:

<ul>
  <% if current_page?("/company") %>
    <li>Company Space</li>
  <% elsif current_page?("/user_page") %>
    <li>User Space</li>
  <% else %>
  <% end %>
</ul>

我知道我已经正确地写了这部分,因为当我把它放在application.html.erb布局页面中时,它工作得很好。但是,当我将相同的内容放在顶部导航栏中时,它不起作用。导航栏位于部分调用_header.html.erb中,当前在布局中呈现如下:

<body>
  <%= javascript_include_tag "application" %>

  <%= render 'layouts/header' %>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
  <%= yield %>
  <%= render 'layouts/footer' %>
</body>

我认为这与导航栏未检测到当前页面有关。我希望有人能告诉我为什么会这样,理想情况下我想找到一个相对干燥的解决方案,让我拥有这个功能。(我曾想过为不同的条件创建单独的部分,然后将显示部分的逻辑放在 中application.html.erb,但鉴于这远不是导航栏中唯一的内容,其可维护性似乎相当惨淡。)

谢谢你的帮助!

4

3 回答 3

1

要扩展内森的答案,请指定操作

<% if params[:action] == 'company' %>
    <li>Company Space</li>
<% else params[:action] == 'user_page' %>
    <li>User Space</li>
<% end %>

这会起作用......但它感觉不是最干净的方式。也许用 JS 来做这件事让它更干净?

于 2013-09-26T19:45:47.073 回答
1
<% if params[:controller] == 'company' %>
    <li>Company Space</li>
<% else params[:controller] == 'user_page' %>
    <li>User Space</li>
<% end %>
于 2013-09-26T19:29:04.037 回答
0

您可以通过将以下内容移至受人尊敬的帮助文件来使其更清洁。

  def nav_bar_content(action)
     if action == 'company'
      "Company Space"
     elsif action == 'user_page'
      "User Space"
     else
       # statement
     end
  end

并称<li><%= nav_bar_content(params[:action]) %></li>这是在您的导航栏上

于 2017-03-17T06:25:48.937 回答