Rails: Permalinks für Modelle

Wieder eine herrlich einfache Sache mit großer Wirkung: Um Permalinks - bzw. sprechende URLs - für seine Modelle einzubauen ist nur eine Methode nötig:

In diesem Fall haben wir ein User-Modell, für welches die Methode to_param ganz einfach einen String mit der ID und dem Usernamen (bspw. 1-Dennis) zurückgibt - mehr muss man im Grunde gar nicht tun, da Rails den Rest handhabt.

Where the magic happens…

Der Schlüssel zum Erfolg liegt darin, immer die ID des Modells als ersten Teil der URL zu haben - der restliche String spielt keine Rolle, kann jedoch für Suchmaschinen sehr relevant sein. Wenn wir das Modell nun im View beispielsweise so verlinken

wird Rails bei der Generierung der Route die to_param Methode des Users aufrufen, welche standardmäßig die ID des Modells zurückgibt. Da wir die Methode allerdings überschrieben haben, wird der von uns zurückgegebene Wert genommen. Wichtig dabei ist, dass die ID im View nicht direkt per :id => @user.id übergeben wird, da Rails sich sonst mit der ID begnügt und to_param nicht mehr aufruft.

Rails-intern wird beim Verarbeiten der URL der String, welcher laut Route die ID enthält (in unserem Fall 1-Dennis) in einen Integer umgewandelt - dabei geht der nicht-numerische Teil verloren und es bleibt nur die ID des Modells zurück. Daher ist es unter anderem auch möglich, dass sich beispielsweise der Name des Users ändern kann, ohne Auswirkungen auf bereits indizierte URLs zu haben: Es kommt nur auf die ID an, 1-Dennis ist also das gleiche wie 1-dbloete und so weiter…

iOS app for GitHub

iOctocat

ist GitHub für die Hosentasche - deine Projekte und das was dort passiert immer dabei mit deinem iPhone und iPod Touch.
Die App ist