2010-06-01 11 views

Antwort

25

standardmäßig dynamische Segmente akzeptieren keine Punkte sein sollte - ist dies, weil der Punkt als Trennzeichen für formatiert Routen verwendet wird. Sie können den Routenparametern jedoch einige Regex-Anforderungen hinzufügen. Hier möchten Sie die Punkte in den Parametern zulassen.

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

Und in Schienen 2.3:

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

Relevent rails guides section

+0

Schließlich Rails3 Arbeitslösung! Vielen Dank. – lzap

4

In Rails 4 I verwendet:

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

es jedes Zeichen in beiden params erlaubt (andere als '/')

+1

Dies funktioniert auch mit nicht-lateinischen URLs! – kadrian

1

Und wenn sie mit der Ressourcen Notation verwendet wird, kann es wie folgt geschehen:

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

in Rails getestet

0

Wir hatten ähnlichen Fall 4.1, wenn wir einen Teil eines api Weg entfernt. Im Grunde ging es /api/app/v1/*-/api/v1/*

Wir setzen diese in unseren Routen

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

Das war alles in Ordnung, außer für einige Routen, die mit Pfad endete params einschließlich Punkte. Z.B. /api/v1/foo/00.00.100 wo .100 wurde in format analysiert und das restliche param hatte nur den Wert 00.00

Wir dies auf der params mit einem gewissen Zwang bewacht.

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

Edit: wir Schienen verwenden 5

Verwandte Themen