更改Rails中的当前选项卡

10 css dom ruby-on-rails

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

<li class="current"><%= link_to "Home", provider_path(current_user.id), :method=> "GET"%> </li>
            <li><%= link_to "Edit Profile", edit_student_path(current_user.id) %> </li>
            <li><%= link_to "Search", provider_search_path %> </li>
Run Code Online (Sandbox Code Playgroud)

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

<li><%= link_to "Home", provider_path(current_user.id), :method=> "GET"%> </li>
 <li class="current"><%= link_to "Edit Profile", edit_student_path(current_user.id) %> </li>
  <li><%= link_to "Search", provider_search_path %> </li>
Run Code Online (Sandbox Code Playgroud)

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

谢谢

dan*_*ich 10

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

所以它会是这样的

<li class="<%= controller.class == ProviderController and controller.action_name == 'show' ? 'current' : '' %>"><%= link_to "Home", provider_path(current_user.id), :method=> "GET"%> </li>
<li class="<%= controller.class == StudentController and controller.action_name == 'edit' ? 'current' : '' %>"><%= link_to "Edit Profile", edit_student_path(current_user.id) %> </li>
<li class="<%= controller.class == ProviderController and controller.action_name == 'search' ? 'current' : '' %>"><%= link_to "Search", provider_search_path %> </li>
Run Code Online (Sandbox Code Playgroud)

我相信有一些方法可以让你在浏览网页的当前URL,但随后你的"活跃"的造型将依赖于仅通过这条道路,这可能不总是这样的情况取决于线路要实现这个动作,这种方式将确保视图根据实际运行的内容显示真实情况,而不是地址栏中的url


kaf*_*hau 6

你可以尝试类似的东西:

<li class="<%= controller.controller_path == 'provider' ? 'current' : '' %>"><%= link_to "Home", provider_path(current_user.id), :method=> "GET"%> </li>
<li class="<%= controller.controller_path == 'student' ? 'current' : '' %>"><%= link_to "Edit Profile", edit_student_path(current_user.id) %> </li>
<li class="<%= controller.controller_path == 'search' ? 'current' : '' %>"><%= link_to "Search", provider_search_path %> </li>
Run Code Online (Sandbox Code Playgroud)

...然后检查你来自哪个控制器.