更改Rails中的当前选项卡

我在应用程序顶部有一个选项卡列表,我在application.html.erb的一般布局中包含这些选项卡。 它们看起来像这样:

  • "GET"%>
  • 当我点击该页面时,我想将所选标签更改为“当前标签”。 因此,当我单击编辑配置文件并加载编辑配置文件页面时,选项卡应如下所示:

     
  • "GET"%>
  • 除了将javascript添加到显示的页面之外,有没有办法做到这一点? 或者,如果有尽可能以DRYest方式执行此操作的最佳做​​法。

    谢谢

    您可以使用controller.class ==controller.action_name ==来确定您所处的控制器和操作

    所以它会是这样的

     
  • <%= link_to "Home", provider_path(current_user.id), :method=> "GET"%>
  • <%= link_to "Edit Profile", edit_student_path(current_user.id) %>
  • <%= link_to "Search", provider_search_path %>
  • 我相信有一些方法可以获取您所在页面的当前url,但是您的“主动”样式将仅依赖于通过该路径获取该操作,根据路径,情况可能并非总是如此,这种方式将确保视图根据实际运行的内容显示真实情况,而不是地址栏中的url

    你可以尝试类似的东西:

     
  • <%= link_to "Home", provider_path(current_user.id), :method=> "GET"%>
  • <%= link_to "Edit Profile", edit_student_path(current_user.id) %>
  • <%= link_to "Search", provider_search_path %>
  • …然后检查你来自哪个控制器。

    看看TabsOnRails

    你可以这样做:

     <%= current_page?(:controller => 'your_controller', :action => 'index') ? 'current' : '' %> 

    我为此做了一个帮助,它可以接受任何对嵌套资源有用的参数,但它也接受一个控制器名称,就像其他答案一样。

    application-helper.rb

      def is_active(*links) links.each { |link| return "active" if params[:controller] == link } end 

    application.html.erb

     
  • ...
  • 要么

    使用HAML 和嵌套资源的示例(对任何提供的控制器名称都是活动的):

    applcation.html.haml

     %li{:class => is_active('blogs', 'comments')} 

    切换页面时,您可以将@current_tab之类的内容从控制器方法传递回erb。 然后使用@current_tab来决定哪个li应该是当前类。 或者,您可以为每个li和id或一些唯一属性提供,只需使用您选择的JavaScript框架更改类。

    我不是说这是最好的方法,但是我很勇敢发布我想出来的:)

    我的布局中的一些示例菜单链接:

       

    然后我创建了这个帮手:

     def menu_link_to(*args, &block) controller = args.shift action = args.shift if controller == controller_name && (action.nil? || action == action_name) if args.third.nil? args.push({:class => 'selected'}) else args.third.merge!({:class => 'selected'}) end end link_to *args, &block end 

    我在应用程序助手中做了这个,它似乎工作正常:

     def current_page(path) "active" if current_page?(path) end 

    然后像这样打电话:

     
  • <%= link_to "Home", root_path %>