Ruby on rails 设置<;李>;基于URL参数的Rails中的活动类

Ruby on rails 设置<;李>;基于URL参数的Rails中的活动类,ruby-on-rails,Ruby On Rails,我有一个这样的导航: <nav> <ul class='nav nav-pills'> <li> <%= link_to 'link1', '#' %> </li> <li> <%= link_to 'link1', '#' %> </li> </ul> </nav> 我的路由、视图和控制器设置为

我有一个这样的导航:

<nav>
  <ul class='nav nav-pills'>
    <li>
      <%= link_to 'link1', '#' %>
    </li>
    <li>
      <%= link_to 'link1', '#' %>
    </li>
  </ul>
</nav>


我的路由、视图和控制器设置为
root\u url/../action
root\u url/../action/:page\u id
都将呈现相同的视图,实例变量
@page
将基于
:page\u id
参数设置或设置为操作根的指定默认值。稍后在视图中,我将呈现一个与
@page
名称匹配的分部

我试图做的是在链接文本与
@page
的值匹配的
  • 上设置
    class='active'

    我最初的倾向是保持干燥,设置
    窗口。page_id
    匹配
    @page
    ,并使用CoffeeScript添加类,但这给了我在页面加载和设置类之间非常明显的延迟


    有人知道实现这一点的最佳方法吗?现在我把嵌入式ruby放在每个
  • 元素中,这是非常不受欢迎的。

    从另一篇S.O.文章中借用并稍加修改,以满足您的需要

    用法如下:

    nav_link 'Home', @page
    

    从另一个S.O.职位借用并稍加修改,以满足您的需求

    用法如下:

    nav_link 'Home', @page
    

    扩展99英里的答案,我把它放在相应的帮助程序中:

    def nav_link(link_text, link_path, current_page)
      content_tag(:li, class: ('active' if link_text.downcase.gsub(' ', '_') == current_page) ) do
        link_to link_text, link_path
      end
    end
    
    这样,非活动的
  • 元素就不会有空类,即使链接文本中包含空格,它也可以工作

    在视图中使用,如:

    <%= nav_link "My Page", page_path('my_page'), @page %>
    
    那你就可以了

    <%= nav_link "My Link", page_path('my_page'), 'my_page', @page %>
    

    根据99英里的答案展开,我将其放在相应的帮助程序中:

    def nav_link(link_text, link_path, current_page)
      content_tag(:li, class: ('active' if link_text.downcase.gsub(' ', '_') == current_page) ) do
        link_to link_text, link_path
      end
    end
    
    这样,非活动的
  • 元素就不会有空类,即使链接文本中包含空格,它也可以工作

    在视图中使用,如:

    <%= nav_link "My Page", page_path('my_page'), @page %>
    
    那你就可以了

    <%= nav_link "My Link", page_path('my_page'), 'my_page', @page %>
    

    展开Zeiv的答案,您只需比较url即可:

    助手方法:

    def nav_link(link_text, link_path)
      content_tag(:li, class: ('active' if link_path == url_for(only_path: true)) ) do
        link_to link_text, link_path
      end
    end
    
    现在,在视图中可以执行以下操作:

    <%= nav_link "Some Page", some_page_path %>
    

    展开Zeiv的答案,您只需比较url即可:

    助手方法:

    def nav_link(link_text, link_path)
      content_tag(:li, class: ('active' if link_path == url_for(only_path: true)) ) do
        link_to link_text, link_path
      end
    end
    
    现在,在视图中可以执行以下操作:

    <%= nav_link "Some Page", some_page_path %>
    
    
    
    我认为我们使用助手的方法是正确的,但不幸的是,如果没有
    参数[:page_id]
    只需根据您的需要修改它,根操作案例就无法使用它。然后传递@page,并将其与链接文本进行比较。我修改了答案。将我的修改作为答案提交。谢谢你的帮助!我认为我们使用助手的方法是正确的,但不幸的是,如果没有
    参数[:page_id]
    只需根据您的需要修改它,根操作案例就无法使用它。然后传递@page,并将其与链接文本进行比较。我修改了答案。将我的修改作为答案提交。谢谢你的帮助!可能的重复可能的重复