2016-11-21 21 views
0

我想改變我的應用程序中/felines的路線爲/cats,我想這樣做,同時儘可能少地更改我的應用程序代碼(即不重命名模型,控制器或對URL助手的引用)。路由重命名和重定向產生錯誤的URL幫助

routes.rb我做

get '/felines', to: redirect('/cats') 
resources :cats, as: 'felines' 
  • 其在/cats服務FelinesController#index - 好
  • 並重定向/felines/cats - 還不錯

但在調試時,我發現

  • new_feline_path/cats/new - 好
  • felines_path/felines - BAD!

我還發現,felines_path將變得/cats,根據需要,如果切換在routes.rb兩條線的順序。

爲什麼這些行的順序影響felines_path的值?

有沒有更好的方法可以實現重新路由和重定向?

回答

1
get '/felines', to: redirect('/cats') 

軌道生成用於上述路線felines_path路線輔助並且由於優先級是從頂部到底部,felines_path將指向/貓科動物。這就是更改訂單時指向/cats的原因。

爲您定製的路由分配一個不同的名稱,所以它不會覆蓋felines路徑

get '/felines', to: redirect('/cats'), as: 'felines_redirect' #or someother name like that 
+0

真棒!幾個後續問題:1.爲什麼'new_feline_path'不受自頂向下的優先? 2.「felines_redirect」的價值是否與現有路線不同? – tuff

+1

沒有什麼是真的覆蓋'new_feline_path'。它由'資源:貓'生成,如'貓科動物'。 'felines_redirect'的值並不重要,除非你打算在視圖的某個地方使用助手。我們添加它只是爲了讓rails不使用默認值。 – usha