【问题标题】:In Rails 4, how can I change the text in the nav bar based on the current page?在 Rails 4 中,如何根据当前页面更改导航栏中的文本?
【发布时间】:2013-09-26 19:04:51
【问题描述】:

我正在开发一个 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 中,但鉴于这远不是导航栏中唯一的内容,其可维护性似乎相当令人沮丧。 )

感谢您的帮助!

【问题讨论】:

  • 在您的视图文件中,您可以使用controller_nameaction_name 方法返回当前页面控制器或操作的名称。
  • 有多少“依赖”?是否有一个全部获得/company 的页面列表和一个获得/user 的列表 - 或者许多页面都具有不同的条件?
  • @dax,我试图在这些条件下控制这两个特定的静态页面。用户登录后,我将根据current_user 的属性控制导航栏的外观,效果很好。

标签: ruby-on-rails ruby-on-rails-4 erb partial


【解决方案1】:

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

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

这会起作用...但感觉不是最干净的方法。或许用 JS 来做,让它更干净?

【讨论】:

  • 除了回答我的问题,感谢您指出 JS 可能更干净。我没有考虑这个选项,但我现在会记住它。
【解决方案2】:
<% if params[:controller] == 'company' %>
    <li>Company Space</li>
<% else params[:controller] == 'user_page' %>
    <li>User Space</li>
<% end %>

【讨论】:

  • Company 和 user_page 都是静态页面,它们的控制器是static_pages_controller.rb。当我将此代码放在导航栏中时,它总是显示文本“用户空间”,因为第一行中的条件从未满足。
【解决方案3】:

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

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

并致电&lt;li&gt;&lt;%= nav_bar_content(params[:action]) %&gt;&lt;/li&gt; 这是在您的导航栏上

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 2016-10-25
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多