2012-06-30 41 views
3

我使用這個代碼與Twitter的引導,突出當前活動菜單標籤:如何在Rails中獲取當前控制器的URL?

def nav_link_to(link_text, link_path, options = nil) 
    class_name = current_page?(link_path) ? 'active' : '' 

    content_tag(:li, :class => class_name) do 
     link_to link_text, link_path, options 
    end 
    end 

這當然使得鏈接激活,只有在給定鏈路是當前頁面。 我該如何改變這個功能,這樣它會返回當前控制器下面的任何鏈接'活動'? 換句話說,對於Posts控制器的所有操作,鏈接將處於活動狀態?

回答

14

您可以使用controller_name來獲取當前控制器的名稱。

+0

是的,但問題是 - 我如何檢查一個鏈接或URL屬於某個控制器 - 這是代碼是關於。 – valk

+0

你沒有。但你可以手動使用它:'link_to'posts',posts_path,:class => params [:controller] =='posts'? 'active':''' – rfunduk

+0

你可以像正則表達式一樣......':class => path =〜params [:controller]? '主動':'''......但這對我來說很重要。 – rfunduk

5

這可能與解決:

Rails.application.routes.recognize_path(link_path)[:controller]

0

不知道如果我讀這正確的,但你不應該使用get參數去查看當前的控制器。

您是否嘗試過使用request.path?換句話說,檢查下面的任何鏈接是否在其路徑中包含'request.path'...

4

params[:controller]返回控制器名稱及其名稱空間。

如果你想獲取控制器名稱,只能使用controller.controller_name

class Admin::Posts; end 

# from the view 
params[:controller] 
=> 'admin/posts' 

controller.controller_name 
=> 'posts' 
相關問題