2011-09-26 77 views
0

我有一個幫助方法來幫助確定導航菜單項應該是否處於活動狀態。將路徑傳遞給current_page方法

def events_nav_link 
    nav_item = 'Events' 

    if current_page?(events_path) # additional conditions here 
     # do nothing 
    else 
     nav_item = link_to nav_item, events_path 
    end 

    content_tag(:li, nav_item + vertical_divider, :class => 'first') 
    end 

我想這個鏈接是不活動不僅爲events_path頁,但對於其他網頁也是如此。問題是我不知道基於這條路線傳遞current_page(路徑)方法的參數:

map.list_events'/ events /:league /:year /:month /:day',:controller =>'events',:action =>'list'

此路線生成一個路徑,例如/ pow或/ chow/2011/09/25。聯盟可以是pow,chow或哇。

+0

不是您的問題的直接答案,但您可以使用像[simple_navigation](https://github.com/andi/simple-navigation)這樣的gem來渲染這種菜單。 – Fabio

+0

謝謝。我看過寶石。計劃在某個時候嘗試一下。 – keruilin

回答

1

我喜歡不顯眼的JS方法,添加/刪除類和unwrap()停用的鏈接,但它需要特定的規則。

Rails的方式是使用link_to_unless_current內置幫助程序在當前頁面href上高亮顯示或取消鏈接。

+0

是的,我在大多數情況下使用link_to_unless_current,但對於涉及嵌套菜單,ajax和其他優點的問題,我需要上述問題的解決方案。 – keruilin

0

這是我做的:

application_helper.rb:

<%= already_here?("users","index") ? "Manage Users" : link_to("Manage Users", users_path, :title => "Manage Users.") %> 

當然,你可以抽象進一步通過傳遞:

def already_here?(this_controller,this_action) 
    controller_name == this_controller && action_name == this_action ? true : false 
    end 

在視圖如果你願意的話,可以通過鏈接的標題和助手的路徑,但這對我來說有點麻煩。

UPDATE:沒關係,看米哈伊洛夫的答案 - 更清潔(爲什麼重新發明輪子?):)

+1

有一個內置的助手** link_to_unless_current ** – Anatoly

+0

謝謝!我一直在使用Rails很長一段時間,從來沒有注意到這一點。你可以發佈它作爲答案,以便我可以爲你+1嗎? – jschorr

0

您正在尋找named routes。在您的routes.rb文件中,添加

:as => :foo 

之後的路線。然後使用

if current_page(events_path) || current_page(foo_path) 

在您的情況。