對於我來說,我會用一個導航控制器,而不是應用程序控制器應用控制器生長極其複雜容易。
這應該app/views/navigation
創建視圖文件夾。我也將所有的導航模板放在這裏(包括你的主導航)。
所以有可能是這些文件:
app/views/navigation/
_main_nav.html.erb # made it a partial file for including in other pages
subnav.html.erb # or subnav.js.erb if you don ajax call and return scripts
,並在你的佈局文件,要將主NAV,你只呈現它。
所以,即使明天你突然想兩個或三個不同的導航菜單,有ajax調用,你有一個集中的地方來處理它們,而不是把他們所有的應用控制器內。
另一個更多的建議是,在某些範圍內生成導航控制器。像app/controllers/page_structures/navigation_controller.rb
,所以你的意見將在app/views/page_structures/navigation/
這樣,你可以把所有的頁面結構相關的東西,如側邊欄,自定義標題,橫幅等在同一範圍page_structures內。
===== UPDATE =====
由於您的AJAX調用似乎相對靜態的,我建議你的路使用某種直接的匹配。
如果我的猜測是正確的,你的頂部導航有一些項目,每個項目都有自己的子菜單。所以你會想要一個一個加載子菜單,但不是全部。 (如果實際上它是所有,那麼你可以只包括他們所有的渲染......)
/page_structures/:top_nav/:sub_nav_template_name # So in here I assumed you will have many navigations and sub-nav to load.
那麼我們匹配這個路徑以下行動:
def get_sub_nav
# checks both params[:top_nav] and params[:sub_nav_template_name] exist and not pointing to some other dangerous place. (I don't know if this work if the input is './' or '../' these kind of things
render "page_structures/navigation/#{params[:top_nav]}/#{params[:sub_nav_template_name]}"
end
通過這個簡單的動作,只要你添加更多導航/導航項目,您只需創建相應的AJAX響應模板。這樣,你正在做最小的事情!
當然,如果一些如何有一些項目需要返回一些其他的數據作爲響應,如響應子類,你可能需要創建其他途徑讓你通過你的父類的ID。
你可以這樣想:我的建議是爲默認的相對靜態的集中式子導航 但是如果你需要一些專門的子導航,需要其他數據處理,每一個你必須創建一個路線並在導航控制器中接受您的類別ID,產品ID等的動作。但是,這些模板文件仍然可以遵循相同的歸檔方式。
非常酷,我現在要試試...你對路線有什麼建議,因爲我正在做一個AJAX調用來獲取subnav?/page_structures/nav/subnav /? – AnApprentice 2010-09-26 03:09:18
由於這些AJAX調用路徑通常供內部使用,並非公開(並且很可能是發佈請求),所以我至少不介意它們是如何出現的。使用醜陋難猜的路徑可能會增加一些安全問題... – PeterWong 2010-09-26 14:57:34
爲了簡單起見(因爲您的調用看起來只是獲取模板,而不是保存或銷燬任何東西),所以我會建議一些直接映射以儘量減少工作量。請看我的更新...... – PeterWong 2010-09-26 14:59:24