2010-01-13 71 views
2

我試圖在導軌中創建一個自定義路線,我不知道我是否以正確的方式去做。首先,我有一個REST風格的資源,用於重定向到mystash作爲控制器:創建自定義導軌路線

map.resources :stashes, :as => 'mystash' 
site.com/mystash goes to :controller => 'stashes', :action => 'show' 

這就是我想要的。現在它變得有點混亂。我希望能夠爲此路線添加條件參數。最後,我想有一個看起來像這樣的路線:

site.com/mystash/zoomout/new/quiz_on/

我在路線地方的:

map.connect 'mystash/:zoom/:nav_option/:quiz', 
      :controller => 'stashes', 
      :action => 'show'  
map.connect 'mystash/:zoom/:nav_option', 
      :controller => 'stashes', 
      :action => 'show' 
map.connect 'mystash/:zoom', 
      :controller => 'stashes', 
      :action => 'show' 
map.connect 'mystash', 
      :controller => 'stashes', 
      :action => 'show' 

我的路線有結束了在瀏覽器看起來像這樣: site.com//mystash/zoomin?nav_option=New &測驗= quizon

,這是我的一個鏈接看起來像:

<%= link_to "In", stash_path("zoomin", :nav_option => @nav_option, :quiz => @quiz) %> 

任何幫助表示讚賞,我很新的自定義路線!

回答

1

你應該給這些路由不同的名稱而不是默認的,或者你應該用散列而不是X_path調用來指定你的路由。例如:

map.stash_zoom_nav_quiz 'mystash/:zoom/:nav_option/:quiz', 
    :controller => 'stashes', 
    :action => 'show'  
map.stash_zoom_nav 'mystash/:zoom/:nav_option', 
    :controller => 'stashes', 
    :action => 'show' 

請記住,當你宣佈一個名爲路徑,路徑的參數必須在X_path呼叫無遺漏規定,而不是作爲一個哈希值。

link_to('Foo', stash_zoom_nav_quiz_path(@zoom, @nav_option, @quiz)) 
link_to('Bar', stash_zoom_nav_path(@zoom, @nav_option)) 

另一種方法是不使用命名路由打擾,讓路由引擎算起來自身:

link_to('Foo', :controller => 'stashes', :action => 'show', :zoom => @zoom, :nav_option => @nav_option, :quiz => @quiz) 

如果你不確定定義了什麼路線,或者如何給他們打電話,請務必仔細檢查「耙路」的輸出。您還可以使用assert_routing方法編寫路由功能測試。