2010-06-01 12 views

risposta

25

Per impostazione predefinita, i segmenti dinamici non accettano punti - questo è perché il punto è usato come separatore per le rotte formattati. Tuttavia, è possibile aggiungere alcuni requisiti regex ai parametri del percorso. Qui, vuoi consentire i punti nei parametri.

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

E in Rails 2.3:

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

Relevent rails guides section

+0

soluzione Infine Rails3 di lavoro! Grazie. – lzap

4

In Rails 4 ho usato:

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

Permette qualsiasi carattere in entrambi i params (diverso da '/')

+1

Anche questo funziona con URL non latini! – kadrian

1

E quando utilizzato con il risorse notazione, si può fare in questo modo:

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

Testato in Rails 4.1

0

Abbiamo avuto caso simile quando abbiamo rimosso una parte di un percorso di api. Fondamentalmente siamo andati /api/app/v1/*-/api/v1/*

Abbiamo messo questo nei nostri percorsi

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

Questo era tutto bene tranne che per alcuni itinerari che si sono concluse con il percorso PARAMS tra cui puntini. Per esempio. /api/v1/foo/00.00.100 dove .100 preso analizzato in format e il parametro restante aveva solo il valore 00.00

Abbiamo custoditi questo con qualche vincolo sulle params.

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

Edit: usiamo le rotaie 5

Problemi correlati