1

我的 Rails 应用程序中有简单的导航栏(、、、HomeNewsContact。我需要定义当前页面来添加:class => 'active'. 我发现定义当前页面的解决方案很少。我什至创建了自己的版本。但所有这些都归结为一个:

<li class=<%= current_page?(tratata) ? "active" : nil %>...</li>

我怎样才能将这个解决方案应用于所有人<li> - elements,但不是每次都写这个?

4

2 回答 2

1

这不是最好的方法,但会给你一些关于拉动当前控制器和动作的想法。

您可以查看https://github.com/weppos/tabs_on_rails以获取有关如何使其代码更简洁的更多想法。但这需要更多的设置。您将创建一个 tabs_tag 函数来检查当前页面并执行不同的样式。就个人而言,我并不太喜欢这个宝石,而是更喜欢以自己的方式设计我的页面。

<%= tabs_tag do |tab| %>
  <%= tab.home      'Homepage', root_path %>
  <%= tab.dashboard 'Dashboard', dashboard_path %>
  <%= tab.account   'Account', account_path %>
<% end %>

if "#{controller.controller_name.to_s}.#{controller.action_name.to_s}" == "pages.index"
  <li class='active'>
else
  <li>
end

或使用辅助方法

def current_page(page,action)
  if controller.controller_name.to_s == page && controller.action_name.to_s == action
    'active'
  else
    'not_active'
 end
end

在你看来

<li class="<%= current_page('pages','index') %>">
于 2012-07-20T21:22:44.537 回答
1

一种方法是检查用户所在的页面是否与他们正在访问的控制器的名称匹配(您也可以使用控制器名称/操作名称组合以获得额外的特异性)。

application_helper

def nav_helper(arg)
  controller_name == arg ? "current" : ""
end

看法

<li class="<%= nav_helper('about') %>">
  <a href="#">A link</a>
</li>

编辑:

糟糕,我在你编辑你的问题之前写了这个。要将其添加到所有“li”标签,请使用另一个助手,该助手使用content_tag并将nav_helper方法放置在其中。

于 2012-07-20T21:13:43.850 回答