Rails:为导航设置默认 'current' css class?

Rails: set default 'current' css class for navigation?

使用这里的解决方法后还是有问题 Best way to add "current" class to nav in Rails 3

def nav_link(link_text, link_path)
  class_name = current_page?(link_path) ? 'current' : ''
  content_tag(:li, :class => class_name) do
    link_to link_text, link_path
  end
end

例如,我有 localhost/action1localhost/action2,每个都有一个导航按钮。 当用户在任一页面时,它都很好用。在这种情况下,其中一个按钮会有 'current' css class.

但是,如果我将 root_path 设置为其中之一,假设是 /action1,那么当用户访问 localhost 时,action1 的按钮将不会'没有 current class

如何解决设置为root_path时添加缺少的currentcssclass?

您可能希望通过以下方式突出显示您的导航菜单 - 我很确定无论设置根路径如何,这都有效:

<ul>
  <li class="<%= "current" if params[:controller] == "home" %>">Home</li>
  <li class="<%= "current" if params[:controller] == "action1" %>">Action 1</li>
  <li class="<%= "current" if params[:controller] == "action2" %>">Action 2</li>
</ul>

您不妨更换

params[:controller]

params[:action] 

取决于您要突出显示的级别。我在最近的一个项目中使用了这个设置,它对我很有用。祝你好运!

您可以查询路由器本身,为您提供当前路径的 controlleraction,并将其与 params.[=14= 的当前值进行比较]

def nav_link(text, path)
  recognized = Rails.application.routes.recognize_path(path)

  klass = "current" if recognized[:controller] == params[:controller] &&
    recognized[:action] == params[:action]

  content_tag(:li, class: klass) do
    link_to(text, path)
  end
end