2010-09-09 4 views
20

Tengo un controlador CRUD para un modelo.Rails 3: encaminar un recurso a otro nombre

Hacer resources :foo me permite enrutar en /foo/:id, etc. para realizar llamadas.

Quiero agregar una ruta para la traducción de 'foo' en otro idioma. Digamos 'toto'. Entonces quiero que todas las rutas /toto/:id, etc., actúen exactamente como las rutas /foo/:id, etc.

¿Cómo puedo lograr eso?

Respuesta

34

Puede agregar un nuevo recurso y especificar foo como el controlador:

resources :toto, :controller=>"foo" 

Este señalarán todas las acciones a "foo", pero hay una Gotcha. Creo que te encontrarás con problemas con los enlaces en la página, si estás utilizando foo_url o algo así. Por lo tanto, tendrías que encontrar la forma de crear URLs dinámicamente basadas en el controlador en "request.path".

+0

todavía funciona como un encanto en Rails 4.1 – Omni

+1

Cualquier idea de cómo podemos obtener los puntos de vista para cargar de 'vistas/toto' en lugar de' vistas/foo'? – FloatingRock

+0

'resources: toto,: controller =>" foo ",: path =>" toto "' – Ruby

21

Esto le permitirá cambiar el nombre caminos visto por el usuario pero mantener el nombre original de los controladores en el código:

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

From the Ruby on Rails Guides

+1

+1 ¡este es el indicado! –

0

Se puede lograr algo parecido a esto usando alcance:

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

Esto hace que tu bar_controller sea un recurso para cualquier cosa/foo, donde todo pasa como parámetro de idioma.

manera:

  • en_US/foo
  • es_ES/foo
  • ja_JP/foo

todos nos manejado por bar_controller, con el normal mapping de recursos, y se obtiene params [ : idioma] en el controlador de forma gratuita.

2

Si lo entiendo correctamente, quiere usar otra ruta.

resources :foo, path: 'toto' 

Ahora usted tendrá:

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