Ich habe eine Seite, die alle Projekte auflistet, die sortierbare Überschriften und Paginierungen haben.
path:
/projects?order=asc&page=3&sort=code
Ich beschließe, eines der Projekte zu bearbeiten
path:
projects/436/edit
Wenn ich auf dieser Seite auf Speichern klicke, wird die Projektcontroller- / Aktualisierungsmethode aufgerufen. Nachdem ich den Code aktualisiert habe, möchte ich zu dem Pfad umleiten, auf dem ich war, bevor ich auf Bearbeiten eines bestimmten Projekts geklickt habe. Mit anderen Worten, ich möchte mit derselben Sortierung auf derselben Seite sein.
Ich habe link_to (: back) gesehen und dachte, dass: back in redirect_to (: back) funktionieren könnte, aber das geht nicht.
puts YAML::dump(:back)
yields the following:
:back
Irgendwelche Ideen, wie ich das zum Laufen bringen könnte. Es scheint ein Problem zu sein, das leicht zu lösen wäre, aber ich bin neu bei RoR.
quelle
redirect_to session.delete(:return_to)
in der Update-Aktion vorschlagen . Dadurch wird der Wert aus der Sitzung bereinigt, da er nicht mehr benötigt wird.redirect_to request.referer
?request.referer.referer
, wenn das möglich sein könnte. @ Jaime Bellmyer Warum||=
?Warum funktioniert es
redirect_to(:back)
nicht für Sie, warum ist es ein No Go?redirect_to(:back)
wirkt wie ein Zauber für mich. Es ist nur eine Abkürzung fürredirect_to(request.env['HTTP_REFERER'])
http://apidock.com/rails/ActionController/Base/redirect_to (vor Rails 3) oder http://apidock.com/rails/ActionController/Redirecting/redirect_to (Rails 3)
Bitte beachten Sie, dass
redirect_to(:back)
dies in Rails 5 veraltet ist. Sie können verwendenredirect_back(fallback_location: 'something')
stattdessen (siehe http://blog.bigbinary.com/2016/02/29/rails-5-improves-redirect_to_back-with-redirect-back.html )quelle
redirect_to :back
funktioniert auch bei mir nicht gut, sagen wir Sie besuchen/posts/new
, dies wird als Referer für die nächste Anfrage festgelegt, so dass nach erfolgreicher Übermittlung des Formulars das Formular erneut angezeigt wird, d/posts/new
. h . Es funktioniert jedoch gut für andere Zwecke.redirect_to projects_path
.HTTP_REFERER
nicht festgelegt istActionController::RedirectBackError
. Nach meinem Verständnisredirect_back
erfordert die Verwendung keine Ausnahmebehandlung, da Sie zur Bereitstellung gezwungen sindfallback_location
. Vielleicht ist "funktioniert nicht gut" nicht der richtige Weg, um es auszudrücken.Ich mag Jaimes Methode mit einer Ausnahme, es hat für mich besser funktioniert, den Referer jedes Mal neu zu speichern:
Der Grund dafür ist, dass Sie beim Bearbeiten mehrerer Objekte immer wieder zu der ersten URL umgeleitet werden, die Sie mit Jaimes Methode in der Sitzung gespeichert haben. Nehmen wir zum Beispiel an, ich habe Objekte von Apple und Orange. Ich bearbeite Apple und werde
session[:return_to]
auf den Referer dieser Aktion eingestellt. Wenn ich Orangen mit demselben Code bearbeite,session[:return_to]
wird er nicht festgelegt, da er bereits definiert ist. Wenn ich die Orange aktualisiere, werde ich an den Referer der vorherigen Apple # -Bearbeitungsaktion gesendet.quelle
So machen wir es in unserer Anwendung
Auf diese Weise speichern Sie nur die letzte GET-Anforderung im
:return_to
Sitzungsparameter, sodass alle Formulare, auch wenn POSTed mehrmals verwendet wird, funktionieren:return_to
.quelle
request.request_uri
ist nicht mehr verfügbar, daher schlage ich vor,request.fullpath
stattdessen zu verwendenand
undor
inif
Aussagen zu verwenden. Verwenden Sie&&
und||
stattdessen. Details hier .In Rails 5 können Sie gemäß den Anweisungen in Rails Guides Folgendes verwenden:
Der 'Back'-Speicherort wird aus dem HTTP_REFERER-Header abgerufen, der vom Browser nicht garantiert festgelegt wird. Deshalb sollten Sie einen 'fallback_location' angeben.
quelle
notice
Objekt mit derredirect_back
Anweisung übergeben, um dem Benutzer mitzuteilen, dass mit einer Flash-Nachricht ein Fehler aufgetreten ist ?redirect_back(fallback_location: root_path, notice: "Something went wrong!")
. Hoffe es könnte irgendwie helfen.request.referer
wird von Rack eingestellt und wie folgt eingestellt:Tun Sie einfach ein
redirect_to request.referer
und es wird immer auf die wahre verweisenden Seite, oder die root_path ( ‚/‘ umzuleiten. Dies ist wichtig, wenn Sie Tests, die bei Direktnavigation fehlschlagen, an eine bestimmte Seite übergeben, auf der der Controller ein redirect_to: back auslöstquelle
referer
wurde als definierter 28. März 2011 , und das ist , wie es ab definiert ist heute . Das heißt,|| '/'
ist nicht Teil der Definition.Für diejenigen, die interessiert sind, ist hier meine Implementierung, die die ursprüngliche Antwort von MBO erweitert (geschrieben gegen Rails 4.2.4, Ruby 2.1.5).
quelle