2014-04-09 60 views
1

添加类在我的布局应用程序我有这样的代码:Rails的活跃URL链接

%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)”我需要添加类链接“积极”,但我怎么能这样做? 我只有与思路:

- if request.original_url.include? ("all_articles/1") 
    = link_to "Новости", all_articles_path(id: 1), class: "active" 

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

回答

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

是的,这是基本的&它可以成为帮手,但我希望它能告诉你你能做什么!

+0

如何成为如果我有: – brabertaser19

+0

'= active_link_to “VIP-объявления”,advanced_search_show_path(by_vip:真),:活性=>:独占 %的Li = active_link_to “Недавниеобъявления”,advanced_search_show_path(by_new:真),: active =>:exclusive' - 如何突出显示一个链接,但不是两个! ? – brabertaser19

+0

那你觉得呢? – brabertaser19

7

使用Rails的current_page?method这个

class: <%= "active" if current_page?(all_articles_path) %> 

要使用这种方法在HAML你可以使用字符串插值:

class: "#{'active' if current_page?(all_articles_path)}" 
+2

如果你有几个链接你应该执行这样的检查,你可以定义包装'link_to'的辅助方法并执行'current_page?'的检查? – bronislav

0

更好,我们写一个辅助方法来知道链路是否处于活动状态不添加课程: -

= link_to "Новости", all_articles_path(id: 1), :class => is_article_link_active?(1) ? "active" : "" 

A dd下面的方法到你的帮助文件。

def is_article_link_active?(id) 
    request.path.include?(all_articles_path(id: id)) 
end 
+1

以及如果我有other_path/1? – brabertaser19

+0

@ brabertaser1992是的,你指出了正确的,我的错误。现在我已经更新了答案,现在看到它。 –