在我的布局应用中,我有这样的代码:
%li
= link_to "Новости", all_articles_path(id: 1)
%li
= link_to "Тест-драйвы", all_articles_path(id: 2)
%li
= link_to "VIP-объявления", advanced_search_show_path(by_vip: true)
例如,如果我去url" all_articles_path(id:1)"我需要添加类来链接" active",但我怎么能这样做? 我只有以下想法:
- if request.original_url.include? ("all_articles/1")
= link_to "Новости", all_articles_path(id: 1), class: "active"
但我认为这是一个坏主意,也许还有其他更好的解决这个问题的方法?
答案 0 :(得分:7)
使用rails current_page?
method来实现此目标
class: <%= "active" if current_page?(all_articles_path) %>
要在HAML中使用此方法,您可以使用字符串插值:
class: "#{'active' if current_page?(all_articles_path)}"
答案 1 :(得分:5)
有一种更好的方式:active_link_to
这个宝石太棒了 - 你只需要使用= active_link_to "link", path()
帮助器,它就会提供一个活跃的类。我们在商业应用程序中使用它,它开箱即用
远远超过current_page?
方法
<强>更新强>
根据评论,条件样式将是这样的:
<% if defined?(params[:by_vip]) || defined?(params[:other]) %>
<% active_class = "active" %>
<% end %>
<%= link_to "your_link, "#", class: active_class %>
是的,这是基本的&amp;它可以放在帮助器中,但我希望它能告诉你你能做什么!
答案 2 :(得分:0)
最好我们编写一个帮助方法来了解链接是否有效以添加类: -
= link_to "Новости", all_articles_path(id: 1), :class => is_article_link_active?(1) ? "active" : ""
将以下方法添加到帮助文件中。
def is_article_link_active?(id)
request.path.include?(all_articles_path(id: id))
end