Mit --path trennst du die Sortieransicht von deiner normalen Index-Seite.
Dein bestehendes Layout bleibt erhalten, während die Reihenfolge bequem auf einer eigenen Seite verwaltet wird.
Sortable auf einer eigenen Seite verwenden
Im ersten Tutorial haben wir b4um:sortable direkt auf die Produktübersicht angewendet. Dadurch wurde /productsselbst zur Sortieransicht.
Das ist praktisch, wenn die Index-Seite hauptsächlich zur Verwaltung der Datensätze dient.
Häufig möchtest du aber beides voneinander trennen:
Die normale Produktseite soll weiterhin ihr ursprüngliches Layout verwenden, während die Reihenfolge auf einer separaten Verwaltungsseite per Drag & Drop geändert wird.
Genau dafür unterstützt der b4um Sortable Generator die Option --path.
Ausgangspunkt
In unserem Beispiel ist Sortable bereits für das bestehende Product-Model eingerichtet:
Die Produkte besitzen damit bereits eine position, und ihre Reihenfolge wird dauerhaft in der Datenbank gespeichert.
Aktuell wird die Sortieransicht direkt unter /products angezeigt.
Hinweis: Dieses Tutorial baut auf dem vorherigen Sortable-Tutorial auf. Wenn Sortable bereits installiert ist, wird keine weitere position-Migration benötigt.
Sortieransicht auf eine eigene Seite verschieben
Wir möchten die normale Produktübersicht wieder für die Darstellung der Produkte verwenden.
Die Sortierung soll stattdessen unter
/sortierung
erreichbar sein.
Dazu führen wir den Sortable Generator erneut aus und geben mit --path den gewünschten Pfad an:
Es wird keine zweite Migration angelegt. Die vorhandene Positionsverwaltung wird weiterverwendet.
Gleichzeitig erhält die Sortierung ihre eigene Seite.
Die normale Produktansicht bleibt erhalten
Rufen wir anschließend wieder
/products
auf, erscheint dort nicht mehr die Sortieransicht.
Stattdessen wird das ursprüngliche Layout der Produktübersicht wieder verwendet.
In unserem Beispiel wird wieder das dreispaltige Card-Grid dargestellt
Wichtig dabei: Nur die Darstellung wurde wiederhergestellt. Die bereits gespeicherte Reihenfolge geht nicht verloren.
Die USB-C Dockingstation hatten wir im vorherigen Tutorial auf Position 1 verschoben. Deshalb erscheint sie auch im wiederhergestellten Grid weiterhin als erstes Produkt.
Das bedeutet:
Layout: wieder Card-Grid
Reihenfolge: weiterhin über position
Die Sortierung und die Darstellung der Datensätze sind damit voneinander getrennt.
Die separate Sortierseite
Die eigentliche Sortieroberfläche erreichen wir jetzt unter:
/sortierung
Dort zeigt der Generator eine eigene Seite mit der Überschrift:
Products sortieren
/sortierung mit der Sortable-Ansicht
Die Oberfläche funktioniert genauso wie die Sortieransicht aus dem ersten Tutorial.
Jeder Datensatz besitzt eine Positionsnummer und einen Drag-Handle. Die Produkte können mit der Maus an die gewünschte Position gezogen werden.
Die normale Produktübersicht bleibt davon optisch unberührt.
Zwei Routen für eine Sortierseite
Für den separaten Pfad erzeugt der Generator zwei Routen.
Mit
bin/rails routes | grep sortierung
sehen wir:
sortierung GET /sortierung products#sort
sort_products PATCH /sortierung products#sort
Beide verwenden dieselbe sort-Action, erfüllen aber unterschiedliche Aufgaben.
GET /sortierung zeigt die Sortieroberfläche an.
PATCH /sortierung wird verwendet, wenn ein Datensatz per Drag & Drop an eine andere Position verschoben wird.
Die Sortierseite anzeigen
Damit dieselbe Controller-Action auch die Seite darstellen kann, ergänzt der Generator die bestehende sort-Action um den GET-Fall:
def sort
if request.get?
@products = Product.order(:position, :id)
return
end
# Sortierung speichern ...
end
Beim normalen Aufruf von /sortierung werden die Produkte also anhand ihrer gespeicherten Position geladen.
ausgeführt, stellt der Generator für /products das vorhandene Layout wieder her.
In unserem Beispiel existiert:
app/views/products/_bento.html.erb
Dieses Partial enthält unser Card-Grid. Deshalb verwendet /products anschließend wieder genau diese Darstellung.
Die Sortieroberfläche wird dagegen auf die neue Seite /sortierung ausgelagert.
Wichtig: Die gespeicherten position-Werte werden dabei nicht zurückgesetzt. Lediglich die Sortieroberfläche wird von der normalen Index-Darstellung getrennt.
Wann ist --path sinnvoll?
Die separate Sortierseite ist besonders praktisch, wenn die normale Index-Seite eine fertige Benutzeroberfläche besitzt – beispielsweise ein Card-Grid – und diese Darstellung nicht durch die Verwaltungsfunktionen ersetzt werden soll.
So kannst du beispielsweise eine öffentliche Produktübersicht unter /products anbieten und die Reihenfolge getrennt unter /sortierung verwalten.
Später lässt sich diese Verwaltungsseite zusätzlich durch deine eigene Authentifizierung oder andere Zugriffskontrollen schützen.
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.