Ich habe schwierig, Querystring-Parameter zu link_to UrlHelper hinzuzufügen. Ich habe zum Beispiel eine Indexansicht, die UI-Elemente zum Sortieren, Filtern und Paginieren enthält (über will_paginate). Das will_paginate-Plugin verwaltet die Intra-Page-Persistenz von Querystring-Parametern korrekt.
Gibt es einen automatischen Mechanismus zum Hinzufügen der Querystring-Parameter zu einer angegebenen benannten Route oder muss ich dies manuell tun? Eine Menge Forschung über dieses scheinbar einfache Konstrukt hat mich ahnungslos gemacht.
Bearbeiten
Einige der Herausforderungen:
Wenn ich zwei Querystring-Parameter habe, Bucket & Sorting, wie kann ein bestimmter Wert in einem link_to auf einen dieser Werte gesetzt werden, während der aktuelle Wert des anderen beibehalten wird? Beispielsweise:
<%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %>
Wenn ich mehrere Querystring-Parameter habe, Bucket & Sorting & Page_size, und ich den Wert auf einen dieser Werte setzen möchte, gibt es eine Möglichkeit, die Namen und Werte der verbleibenden Parameter 'automatisch' einzuschließen? Beispielsweise:
<%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %>
Das will_paginate-Plugin verwaltet seine Seitenvariable und andere Querystring-Variablen automatisch. Es scheint kein automatisches UI-Element zum Verwalten der Seitengröße zu geben. Während ich Code zum Erstellen einer ausgewählten Liste von Seitengrößen gesehen habe, hätte ich lieber A-Elemente dafür (wie SO). Ein Teil dieser Herausforderung bezieht sich auf # 2, ein Teil auf das Ausblenden / Anzeigen dieses UI-Elements basierend auf der Existenz / Nichtexistenz von Datensätzen. Anders gesagt, ich möchte nur Links in Seitengröße einfügen, wenn Datensätze auf der Seite vorhanden sind. Außerdem ziehe ich es vor, die anderen QS-Variablen (dh Seite, Bucket, Sortierung) automatisch einzuschließen, anstatt sie namentlich in link_to aufnehmen zu müssen.
quelle
Antworten:
Die API-Dokumente auf link_to zeigen einige Beispiele für das Hinzufügen von Querystrings zu benannten und alten Routen. Ist das was du willst?
link_to
kann auch Links mit Ankern oder Abfragezeichenfolgen erzeugen:quelle
Wenn Sie schnell und schmutzig vorgehen möchten und sich keine Gedanken über XSS-Angriffe machen möchten
params.merge
, behalten Sie die vorherigen Parameter bei. z.BSiehe: https://stackoverflow.com/a/4174493/445908
Überprüfen Sie andernfalls diese Antwort: params.merge und Cross Site Scripting
quelle
Wenn Sie vorhandene Parameter beibehalten und sich keinen XSS-Angriffen aussetzen möchten, müssen Sie den Parameter-Hash bereinigen und nur die Parameter belassen, die Ihre App senden kann:
Wenn Sie es an mehreren Stellen verwenden, bereinigen Sie die Parameter im Controller:
quelle
Wenn Sie beispielsweise einen Block für eine Glyphicon-Schaltfläche übergeben möchten, wie im Folgenden beschrieben:
Das Übergeben von Querystrings-Parametern könnte dann erreicht werden durch:
quelle