我正在开发一个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
中放置显示部分的逻辑,但鉴于这远不是导航栏中的唯一内容,它的可维护性似乎相当沮丧。)
感谢您的帮助!
答案 0 :(得分:1)
<% if params[:controller] == 'company' %>
<li>Company Space</li>
<% else params[:controller] == 'user_page' %>
<li>User Space</li>
<% end %>
答案 1 :(得分:1)
要扩展nathan的答案,请指定行动
<% if params[:action] == 'company' %>
<li>Company Space</li>
<% else params[:action] == 'user_page' %>
<li>User Space</li>
<% end %>
这会起作用......但感觉不是最干净的方式。或许可以用JS来做它更清洁?
答案 2 :(得分: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>
这是在导航栏上