2013-08-21 55 views
0

我找的良好格局爲具有取決於用戶的狀態和當前路徑導航欄。Rails的導航欄取決於用戶的狀態和路徑

在我們的應用中有一個導航欄,顯示已登錄用戶的用戶特定的選項(我的個人資料,我的工作,...等)的評價和來賓用戶特定的選項(它是如何工作的,成爲會員, ...等等)。

現在我們也有一個演示的用戶,誰應顯示的用戶特定的選項時,他是在路徑和來賓的具體選項的子集時,他是在不同的路徑。

我當前的解決方案是存儲在數組中,並且檢查是否當前路徑是在陣列中的功能的白名單中。

ALLOWED_FOR_DEMO = ['profile', 'demo_jobs', 'jobs'] 

def allowed_for_demo? 
    ALLOWED_FOR_DEMO.each { |path| 
    return true if request.path.include? path 
    } 
    return false 
end 

然後在標題視圖中檢查。

<% if allowed_for_demo? %> 
    <div class="navbar"> 
    <div class="navbar-inner"> 
     <div class="container"> 
     </div> 
    </div> 
    </div> 
<% end %> 

這種模式是非常糟糕的,如果你問我,所以如果任何人有一個更好的模式對於這一點,將是非常讚賞。

回答

0

還好,你可以試試這個。至少它會在找到第一個元素後立即返回。

def allowed_for_demo? 
    ALLOWED_FOR_DEMO.any? { |path| 
    request.path.include? path 
    } 
end 
0

ALLOWED_FOR_DEMO是一個全局變量嗎? 如果你把它放在助手中,你可以定義兩個方法,一個用於popultaing數組,另一個用來檢查它是否允許演示。

class AllowedDemoHelper 
    def set_allowed_demo_path(path) 
    @allowed_demo_path = path 
    end 

    def allowed_for_demo? 
    (@allowed_demo_path || []).any? do |path| 
    request.path.include? path 
    end 
    end 
end 

你也可以把它放在ApplicationController中,但我認爲輔助方法更好。