Ich habe die folgenden zwei Routen in meiner Rails-Anwendung:Rails Einschränkung auf dem Weg, die dynamische Segment enthält
match '/users/:username' => 'users#show', :via => :get, :as => :user
match '/users(/:filter)' => 'users#index', :via => :get, :as => :users
Dies ist so, dass ich Routen wie haben:
/users/cameron
/users/popular
Wo ist der erste ein Benutzer, und der zweite ist ein Filter.
Das Routing in Rails wird jedoch immer die erste Route treffen, weil es den Unterschied zwischen :username
und :filter
nicht kennt.
Beiträge vermeide ich dieses Problem, indem Sie:
match '/posts/:id' => 'posts#show', :via => :get, :as => :post, :id => /[0-9]/
Das funktioniert aber nur, weil Beiträge sind immer ganze Zahlen. Zum Beispiel: /posts/21
Wie kann ich eine Beschränkung auf meine Benutzerrouten anwenden, so dass sie nicht übereinander stolpern und ohne ein Präfix zu einem von ihnen hinzufügen müssen.
warum nicht eine Abfrage-String auf die URL, die anstelle für die Filterung? (dh 'Benutzer? Filter = beliebt ') –
@ MarioPérez Kurze Antwort ist ... Ich will nicht :) – Cameron
Vielleicht dann mit einer Einschränkung, die überprüft, ob die Zeichenfolge ist ein Benutzername oder nicht http://guides.rubyonrails.org/routing.h tml # advanced-constraints, damit Sie die richtige Route auswählen können. Aber die Abfrage der Datenbank scheint für die Performance nicht richtig zu sein. Wenn es deine einzige Option ist ¯ \\ _ (ツ) _/¯ –