开发者

Rails 3 : route a resource to another name

I have a CRUD controller for a model.

Doing resources :foo allows me to route on /foo/:id, etc. for calling actions.

I want add a route for a translation of 'foo' in another language. Let's say 'toto'. So I want all the /t开发者_开发百科oto/:id, etc., routes to act exactly like the /foo/:id, etc., routes.

How may I achieve that?


You can add a new resource and specify foo as the controller:

resources :toto, :controller=>"foo"

This will point all the actions to "foo", but there is a gotcha. I think you will run into problems with the links on the page, if you are using foo_url or something like that. So you would have to figure out a way to create the URLs dymanically based on the controller in "request.path".


This will let you rename paths seen by the user but keep the original name of your controllers in the code:

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

From the Ruby on Rails Guides


If I understand you correctly, you want to just use another path.

resources :foo, path: 'toto'

Now you will have:

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


You can achieve something close to this using scope:

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

This make your bar_controller a resource to anything/foo, where anything gets passed as the :language parameter.

so:

  • en_US/foo
  • de_DE/foo
  • ja_JP/foo

all get handled by bar_controller, with the normal resource mapping, and you get params[:language] in the controller for free.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜