2010-06-01 5 views

Respuesta

25

Por defecto, los segmentos dinámicos no aceptan puntos - esto se debe a que el punto se utiliza como separador de rutas formateados. Sin embargo, puede agregar algunos requisitos de expresiones regulares a los parámetros de ruta. Aquí, quiere permitir los puntos en los parámetros.

match 'some_action/:id' => 'controller#action', :constraints => { :id => /[0-z\.]+/ } 

Y en los carriles de 2,3:

map.connect 'some_action/:id', :controller => 'controller', :action => 'action', :requirements => { :id => /[0-z\.]+/ } 

Relevent rails guides section

+0

solución Finalmente Rails3 trabajo! Gracias. – lzap

4

En Rails 4 utilicé:

get 'operation/:p1/:p2', to: 'operation#get', constraints: { p1: /[^\/]+/, p2: /[^\/]+/ } 

Permite cualquier carácter en los dos parametros (que no sea '/')

+1

¡Esto también funciona con URLs no latinas! – kadrian

1

Y cuando se utiliza con el recursos notación, se puede hacer así:

resources :post, 
       only: [ :create, :index, :destroy ], 
       constraints: { id: /[0-z\.]+/ } 

Probado en Rails 4.1

0

Tuvimos caso similar cuando hemos eliminado una parte de una ruta de API. Básicamente fuimos /api/app/v1/*-/api/v1/*

Ponemos esto en nuestras rutas

match '/api/app/v1/*path', to: redirect(path: '/api/v1/%{path}'), via: :all 

Esto fue todo bien, excepto por algunas rutas que terminaron con la ruta params incluyendo puntos. P.ej. /api/v1/foo/00.00.100 donde obtuve .100 analizado en format y el parámetro restante sólo tenía el valor 00.00

Nos custodiados esto con cierta restricción en los parametros.

put '/api/app/v1/foo/:version', 
    constraints: { version: /([0-9]+)\.([0-9]+)\.([0-9]+)/ }, 
    to: redirect('/api/v1/foo/%{version}') 

Editar: utilizamos los carriles 5

Cuestiones relacionadas