Frage

Rails v2.1 verwenden, können sagen, dass Sie eine Aktion für einen Controller haben, die von mehr als einem Ort zugänglich ist. Zum Beispiel in der Rails-Anwendung, haben Sie einen Link einen Benutzer aus zwei verschiedenen Ansichten zu bearbeiten, eine auf der Benutzer Indexansicht und eine anderen aus einer anderen Ansicht (lets auf jeder Seite von der Navigationsleiste sagen).

Ich frage mich, was der beste Weg ist, den Benutzer wieder an die richtige Stelle in Abhängigkeit von umleiten, welche Verbindung sie angeklickt. Zum Beispiel:

Beispiel 1:

  1. Liste alle Benutzer
  2. Klicken Sie auf "Bearbeiten" auf einem Benutzer in der Liste
  3. Benutzer "Speichern" auf dem Formular klickt, der Controller leitet auf 1 zurück.

Beispiel 2:

  1. Der Benutzer auf einer beliebigen Seite in der Anwendung sein könnte, zeigt die Navigationsleiste einen Link den aktuellen Benutzer
  2. bearbeiten
  3. Der Benutzer klickt auf den Link zu bearbeiten
  4. Der Benutzer auf dem Formular „Speichern“ klickt, Controller leitet zurück zu, was Seite waren sie auf, wenn der Benutzer den Link „Bearbeiten“ in der Navigationsleiste geklickt wird.

Ich habe es in der Vergangenheit getan gesehen von:

  1. Einlegen eines Parameters auf dem Original bearbeiten Link mit der Original-Controller / Aktion, bei der die Verbindung erschien. Um dies zu mehr DRY, you @ controller.controller_name und @ controller.action_name in einem Helfer nutzen könnten.
  2. Die Steuerung speichert die Parameter in einer Sitzungsvariablen.
  3. Sobald der Controller den Datensatz gespeichert hat, leitet es an die Session-Variablen.

Was ich nicht besonders gut an dieser Lösung ist die Notwendigkeit, die Parameter für jeden anwendbar Link in den Ansichten hinzuzufügen. Ich frage mich, ob es einen Weg gibt, das alles in den Controller zu bauen.

Eine bessere Art, wie ich dachte, war:

  1. Legen Sie eine before_filter auf den „Bearbeiten“ -Aktion die Referrer zu speichern (diese zuverlässig genug?) In die Sitzung.
  2. Wenn "update" getroffen wird, wird die Steuerung an das Session-Variable umleiten und dann die Session-Variablen löschen.

Alle Gedanken über den besten Weg, dies zu tun?

War es hilfreich?

Lösung

Ich denke, dass auf der Bearbeitungsaktion mit before_filter ist die am wenigsten aufdringliche.

Die Referer sollten zuverlässig genug sein ... einfach eine Standard in dem Fall ohne Referer zur Verfügung steht (zum Beispiel: jemand die Bearbeitungsseite vorgemerkt) und Sie sollten in Ordnung sein.

Andere Tipps

Flash-: Die Daten, die Sie nur für die nächste Anforderung kann im Flash gespeichert werden, verwenden werden. Dann müssen Sie sich nicht um automatisch gehen, um es zu löschen. Es funktioniert gut für eine begrenzte Bits von Anwendungskontext, die Sie sicher sind, nur braucht einmal - nicht nur für Fehlermeldungen!

Ich weiß, was du letzten HTTP-Zugriff haben : Wenn Sie nur Menschen, die sie an, waren bis zum letzten URL müssen umgeleitet werden dann, dass gerade tun. request.referer wird, für die meisten browers, die die Informationen nicht blockieren, gibt Ihnen die letzte URL der Person war.

#in edit controller
...
flash[:page_to_redirect_to] = request.referer || "/my/default/path"
...

#in save controller
redirect_to flash[:page_to_redirect_to] || "/my/default/path"

Ich würde nicht vorschlagen, hartzucodieren diejenigen, nebenbei bemerkt.

before_filter : Ich habe eine Menge Rails-Entwickler sehen mit diesem als ihre Lieblings-Hammer und alles andere in Nägel drehen. Filter sind nützlich, wenn Sie die Funktionalität für alle oder im Wesentlichen alle Methoden in einem Controller verfügbar machen möchten. Ich weiß nicht, dass unbedingt der Fall ist hier, aber die Leistung kann variieren. Sie können die Filter mit den beiden oben genannten Tricks kombinieren, wenn gewährleistet.

Ein weiterer Ansatz ist es, die Form in einem Overlay zu laden, wie http://flowplayer.org/ Werkzeuge / Overlay / index.html und dann auf ajax einreichen Sie das Overlay schließen kann. Ich tue dies mit einer zum automatischen Vervollständigung in Kombination eine „add new“ Option zu bieten. Sobald das Overlay-Formular abgeschickt wird, habe ich einige Daten in Json zurückgeben, die auf gehandelt wird, um die Autovervollständigung zu füllen. (Ich habe meine eigene Plugin helfen mit, dass alle)

Es dauert ein bisschen mehr Arbeit, aber es funktioniert wirklich gut für den Endverbraucher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top