2009-06-26 10 views
1

Morning Everyone! ..Rails Routing Frage: Mapping Slugs/Permalinks direkt unter Root?

Allgemeine Routing Quesiton Hier ... Ich arbeite derzeit eine ähnliche Route für Benutzer in meiner Anwendung zu erreichen.

http://www.example.com/Benutzername

Dies bildet dann die Show usersControllers #, daher habe ich folgendes in meine Routen-Datei.

map.connect '/: permalink': Controller => "Benutzer",: action => "show"

Ich habe dann die Show Aktion bekam den Benutzer durch die finden Permalink im Param. So funktioniert es aber ....

Das Problem, das ich laufe, ist, dass alle anderen UNDEFINED Routen an userController # Show gesendet werden. 404's & andere nicht benannte Routen. Also denke ich nicht, dass ich die richtige Konvention dafür habe. Meine Lösung besteht darin, andere benannte Routen hinzuzufügen, die das Problem lösen, aber für mich scheint es brüchig. Denke ich über dieses Unrecht nach?

Was ist eine bessere Lösung? Ich werde meine google für Antworten gehen, aber ich dachte nur, dass ich das zur Diskussion werfen würde. Ideen?

Antwort

1

Sie tun es richtig. Schienenrouten gehen von einer hohen Priorität an die Spitze zu einer niedrigen Priorität an der Unterseite. Ihre Benutzer zeigen, dass die Aktion unten angezeigt werden sollte. Stellen Sie nur sicher, dass, wenn der Permalink einem Benutzer nicht entspricht, ein korrekter 404 generiert wird.

+0

Dank Ben, ich schätze die Köpfe hoch. Ich denke, ich habe das herausgefunden. Ich habe den Namespace "Permalink" und alle anderen vorhandenen URLs, die ich oben aufgelistet habe, als höhere Priorität definiert. Jetzt testen ... –

1

Was ist, wenn Sie einen Nutzer erhalten, dessen Nutzername mit anderen URLs auf Ihrer Website übereinstimmt? Das scheint wie ein Ärger zu warten.

ändern Sie es einfach zu http://www.example.com/user/username

diese Weise erhalten Sie einen „user“ Namespace für alle Benutzernamen basierte URLs erstellen.

+0

Zepplock, Yeah, ich habe darüber nachgedacht. Aber ich mag das Aussehen von URLs, die ihre eigenen Profile direkt nach dem Namensraum "root" haben. Ich werde die Validierung einbinden, um zu verhindern, dass Benutzer Namen erstellen, die mit vorhandenen URLs übereinstimmen, oder diese "statischen" URLs stattdessen in ihrem eigenen Namespace haben. D. H. Www.example.com/pages/ ..... Danke für den Tipp! –

+0

/Benutzer/Benutzername ist umständlich. Fügen Sie Benutzernamen hinzu oder beschränken Sie sie auf andere Weise so, dass sie mit anderen Controller-Pfaden übereinstimmen. Im schlimmsten Fall, da der Benutzerpfad eine Route mit niedriger Priorität wäre, wäre ein Zugriff für einen Benutzer nicht möglich. Auch dies ist lösbar, indem einige Datenregeln durchgesetzt werden. –