ruby-on-rails - 在 Rails 4 中,如何根据当前页面更改导航栏中的文本?

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

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

感谢您的帮助!

最佳答案

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

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

这会起作用......但感觉不是最干净的方式。也许可以用 JS 来做,这样会更干净?

关于ruby-on-rails - 在 Rails 4 中,如何根据当前页面更改导航栏中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036541/

相关文章:

html - 我需要在 html.erb ruby​​ 中创建动态选择

javascript - ace 编辑器 - 将模式传递给表单输入

Ruby,使用相同的 DO block 评估一个或另一个 ruby​​ 函数

html - Bootstrap 卡对齐不正确

ruby-on-rails - 无法启动新的 Rails 项目

ruby-on-rails - 无法在模块中的 Rails 4 模型中自动加载常量 API Controller

ruby-on-rails - ActiveRecord 查询 : Get Distinct Users from Posts in Category

ruby-on-rails - spree 1.3 : How to only show users products available in their size

javascript - 卡住整个网站的音乐播放器

javascript - 第一次成功提交后提交停止工作