2014-04-09 93 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是的,你指出了正確的,我的錯誤。現在我已經更新了答案,現在看到它。 –