是否有更干的方法根据 Rails 中的路由动态添加 class?
Is there a more DRY way to dynamically add a class depending on route in Rails?
我有一个包含以下元素的导航栏:
%li
= link_to 'About', 'about'
%li
= link_to 'Help', 'help'
%li
= link_to 'FAQ', 'faq'
当有人访问特定页面时,我想根据访问的页面将 class active
添加到 li
。例如,如果他们访问了常见问题解答页面,最终结果将如下所示:
%li
= link_to 'About', 'about'
%li
= link_to 'Help', 'help'
%li.active
= link_to 'FAQ', 'faq'
这是我目前使用的:
- if request.env['PATH_INFO'] == '/about'
%li.active
= link_to 'About', 'about'
- else
%li
= link_to 'About', 'about'
- if request.env['PATH_INFO'] == '/help'
%li.active
= link_to 'Help', 'help'
- else
%li
= link_to 'Help', 'help'
- if request.env['PATH_INFO'] == '/faq'
%li.active
= link_to 'FAQ', 'faq'
- else
%li
= link_to 'FAQ', 'faq'
有没有一种方法可以减少重复次数?
检查 link_to_unless_current (and the variations of url_helper) 在 API 文档中。
要获得 li.active
,可以使用 current_page?。类似于:
%li{class:("active" if current_page?)}
%= link_to_unless_current "Help", "help"
要始终显示 link,无论是否在当前页面上,只需:
%li{class:("active" if current_page?)}
%= link_to "Help", "help"
您可以为此使用 https://github.com/comfy/active_link_to gem。它非常简单但可定制。如果匹配到某条路由则添加active
class(可自定义匹配)
active_link_to 'Users', '/users'
# => <a href="/users" class="active">Users</a>
或
active_link_to 'Users', users_path, :wrap_tag => :li
# => <li class="active"><a href="/users" class="active">Users</a></li>
我有一个包含以下元素的导航栏:
%li
= link_to 'About', 'about'
%li
= link_to 'Help', 'help'
%li
= link_to 'FAQ', 'faq'
当有人访问特定页面时,我想根据访问的页面将 class active
添加到 li
。例如,如果他们访问了常见问题解答页面,最终结果将如下所示:
%li
= link_to 'About', 'about'
%li
= link_to 'Help', 'help'
%li.active
= link_to 'FAQ', 'faq'
这是我目前使用的:
- if request.env['PATH_INFO'] == '/about'
%li.active
= link_to 'About', 'about'
- else
%li
= link_to 'About', 'about'
- if request.env['PATH_INFO'] == '/help'
%li.active
= link_to 'Help', 'help'
- else
%li
= link_to 'Help', 'help'
- if request.env['PATH_INFO'] == '/faq'
%li.active
= link_to 'FAQ', 'faq'
- else
%li
= link_to 'FAQ', 'faq'
有没有一种方法可以减少重复次数?
检查 link_to_unless_current (and the variations of url_helper) 在 API 文档中。
要获得 li.active
,可以使用 current_page?。类似于:
%li{class:("active" if current_page?)}
%= link_to_unless_current "Help", "help"
要始终显示 link,无论是否在当前页面上,只需:
%li{class:("active" if current_page?)}
%= link_to "Help", "help"
您可以为此使用 https://github.com/comfy/active_link_to gem。它非常简单但可定制。如果匹配到某条路由则添加active
class(可自定义匹配)
active_link_to 'Users', '/users'
# => <a href="/users" class="active">Users</a>
或
active_link_to 'Users', users_path, :wrap_tag => :li
# => <li class="active"><a href="/users" class="active">Users</a></li>