2010-09-09 90 views
20

我有一個模型的CRUD控制器。Rails 3:將資源路由到另一個名稱

resources :foo允許我路由/foo/:id等調用動作。

我想爲另一種語言的'foo'翻譯添加路線。讓我們說'託託'。 所以我想要所有的/toto/:id等,路線的行爲完全像/foo/:id等路線。

我該如何做到這一點?

回答

34

您可以添加新的資源,並指定FOO作爲控制器:

resources :toto, :controller=>"foo" 

這將指向所有的行動,以「富」,但有一個疑難雜症。我想如果你使用foo_url或類似的東西,你會遇到頁面上的鏈接問題。所以你必須找出一種方法來根據「request.path」中的控制器以動態方式創建URL。

+0

不過就像用Rails 4.1 – Omni 2014-09-12 01:19:39

+1

魅力的任何想法,我們怎麼能得到的意見,從意見'的/ toto'代替'看法加載/ foo'? – FloatingRock 2014-10-27 05:55:58

+0

'resources:toto,:controller =>「foo」,:path =>「toto」' – Ruby 2015-09-22 10:03:25

21

這將讓你重新命名,用戶所看到的路徑,但保持你的控制器的原名稱中的代碼:

scope(:path_names => { :new => "neu", :edit => "bearbeiten" }) do 
    resources :categories, :path => "kategorien" 
end 

From the Ruby on Rails Guides

+1

+1這是一個! – 2013-10-31 02:32:57

0

可以實現的東西接近這個使用範圍:

scope ':language/' do 
    resources :foo, controller: 'bar_controller' 
end 

這使得你的bar_controller成爲任何東西/ foo的資源,其中任何東西都被傳遞爲:language參數。

這樣:

  • EN_US /富
  • de_DE這個/富
  • Ja_JP表示/富

都得到通過bar_controller處理,與正常的資源映射,你會得到PARAMS [ :語言]在控制器中是免費的。

2

如果我正確理解你,你只想使用另一條路徑。

resources :foo, path: 'toto' 

現在你將有:

GET /toto   foo#index 
GET /toto/:id  foo#show 
...