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
你可以尝试类似的东西:
<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)
...然后检查你来自哪个控制器.