Rails将类添加到活动URL链接

时间:2014-04-09 07:04:21

标签: ruby-on-rails haml

在我的布局应用中,我有这样的代码:

%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"

但我认为这是一个坏主意,也许还有其他更好的解决这个问题的方法?

3 个答案:

答案 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