2 Stimmen

Wie kann man Ruby on Rails RESTful-Routen hübsch und menschenfreundlich gestalten?

Mit Ruby on Rails ist REST ein großartiges Konzept, das die Dinge für den Entwickler vereinfacht und den Zugriff auf Ressourcen für Maschinen erleichtert, aber es erzeugt auch phänomenal hässliche URLs für Menschen.

Wird zum Beispiel das beliebte RESTful Authentication Plugin für die Benutzeranmeldung und -authentifizierung verwendet, werden zwei Controller für die Authentifizierung und Autorisierung, Benutzer und Sitzungen, erstellt. Der Grund dafür ist, dass Benutzer die langfristigen Ressourcen darstellen, die mit einem Benutzer verbunden sind, wie z. B. Login und Passwort, während eine Sitzung die Anmeldeinformationen darstellt, die mit einer Anmeldesitzung verbunden sind, wie z. B. die Cookie-Ressourcen. Die Anmelde-URL für eine Website wäre also site.com/sessions/new.

Standardmäßig wird auch eine Route erstellt, um dies zu unterstützen: map.login '/login', :controller => 'sessions', :action => 'new'

Dies ist jedoch wirklich nur ein Trick, denn damit die Routen richtig funktionieren, verwendet das erstellte Formular beim Absenden <% form_tag session_path do -%>. Dies führt dazu, dass der Post des Formulars an SessionsController#create geht, aber wenn die Formularübermittlung fehlschlägt (z. B. aufgrund von schlechten Anmeldeinformationen), bleibt der Browser des Benutzers auf site.com/session, was wirklich unangenehm aussieht. Schlimmer noch, wenn der Benutzer manuell diese URL eingeben würde, ist sie nicht verfügbar, es sei denn, ich definiere eine Indexmethode. Wenn ich das form_tag so ändere, dass es <% form_tag login_path do -%> lautet, führt dies zu POSTS an SessionsController#new, was die REST vollständig durcheinander bringt.

Wie kann ich konsistente und vernünftig aussehende URLs mit REST haben? Insgesamt bin ich wirklich von der Bequemlichkeit der Verwendung von REST verlockt, aber es scheint ziemlich falsch, dass dies (negative) Änderungen für den Benutzer sichtbar produzieren sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X