Bisher werden unsere Produkte über ihre Datenbank-ID aufgerufen. Ein Produkt kann beispielsweise unter /products/2 erreichbar sein
Mit dem b4um Generator können wir einem bereits vorhandenen Model nachträglich lesbare URLs hinzufügen. Dabei bleibt die Datenbank-ID erhalten und wird um einen lesbaren Teil ergänzt.
Für unsere Products verwenden wir den Namen des Produkts:
bin/rails generate b4um:readable Product name
Der Generator ergänzt das vorhandene Product-Model um die dafür notwendige to_param-Methode:
def to_param
"#{id} #{name}".parameterize
end
An der Datenbank, den Routes und dem Controller müssen wir nichts ändern.
Aus der bisherigen URL
/products/2
wird beispielsweise:
/products/2-macbook-pro
Die ID bleibt bewusst Bestandteil der URL. Dadurch kann Rails das Produkt weiterhin über seine ID finden, während der zusätzliche Name die URL verständlicher macht.
/products/2
/products/2-macbook-pro
Was passiert, wenn sich der Name ändert?
Ändern wir beispielsweise den Produktnamen von MacBook Pro in MacBook Pro M5, erzeugt Rails für das Produkt anschließend die neue URL:
/products/2-macbook-pro-m5
Der lesbare Teil wird also automatisch aus dem aktuellen Namen erzeugt.
Ein wichtiger Vorteil dieser Lösung: Die ID bleibt unverändert. Deshalb konnten wir in unserem Test das Produkt weiterhin sowohl über
/products/2
als auch über die zuvor erzeugte URL
/products/2-macbook-pro
aufrufen.
Rails verwendet die führende ID weiterhin zur Suche des Datensatzes. Eine alte URL wird dabei nicht automatisch auf die neu erzeugte URL umgeleitet, der Datensatz bleibt darüber jedoch erreichbar.
Damit lassen sich lesbare URLs auch nachträglich in eine bereits bestehende b4um-Ressource integrieren, ohne die vorhandene Routing-Struktur umzubauen.
Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren,
Funktionen für soziale Medien anbieten zu können und die Zugriffe auf
unsere Website zu analysieren.
Sie akzeptieren unsere Cookies, wenn Sie fortfahren diese Webseite zu
nutzen.
Datenschutzerklärung.