La respuesta estaba en el manual[1] (como a veces pasa :)). También la explicación de por qué no andaba namespace. Esta ruta arregla todo: match ':controller(/:action(/:id))', :controller => /admin\/[^\/]+/ [1] http://guides.rubyonrails.org/routing.html#dynamic-segments