【发布时间】: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_name和action_name方法返回当前页面控制器或操作的名称。 -
有多少“依赖”?是否有一个全部获得
/company的页面列表和一个获得/user的列表 - 或者许多页面都具有不同的条件? -
@dax,我试图在这些条件下控制这两个特定的静态页面。用户登录后,我将根据
current_user的属性控制导航栏的外观,效果很好。
标签: ruby-on-rails ruby-on-rails-4 erb partial