Ich habe ein Problem mit redirect_to :back
. Ja, es sind Überweiser.
Ich bekomme oft die Ausnahme
(ActionController :: RedirectBackError) "In der Anforderung für diese Aktion wurde kein HTTP_REFERER festgelegt, daher konnte redirect_to: back nicht erfolgreich aufgerufen werden. Wenn dies ein Test ist, müssen Sie request.env [\" HTTP_REFERER \ "] angeben."
Mir ist klar, dass dies darauf zurückzuführen ist, dass ein Referrer nicht verfügbar ist. Gibt es eine Möglichkeit, beispielsweise bei jedem Zugriff auf die zuletzt besuchte Seite eine Sitzungsvariable festzulegen und diese Sitzungsvariable zum Umleiten zu verwenden, wenn HTTP_REFERER nicht verfügbar ist?
ruby-on-rails
ruby
http
user67050
quelle
quelle
Antworten:
Es ist unwahrscheinlich , dass Sie tun , um eine Sitzung haben und nicht einen Referrer haben.
Die Situation, dass ein Überweiser nicht eingestellt ist, ist nicht ungewöhnlich und ich rette normalerweise diese Erwartung:
Wenn Sie dies oft tun (was ich für eine schlechte Idee halte), können Sie es in eine andere Methode einwickeln, wie Maran vorschlägt.
Übrigens halte ich das für eine schlechte Idee, da dies den Benutzerfluss mehrdeutig macht. Nur bei einem Login ist dies sinnvoll.
UPDATE : Wie mehrere Personen betonten, funktioniert dies nicht mehr mit Rails 5. Stattdessen
redirect_back
unterstützt diese Methode auch einen Fallback. Der Code wird dann:quelle
rescue_from
wenn der Controller mehrere hatteredirect_to :back
redirect_to (request.referrer || root_url)
Hier ist meine kleine Methode redirect_to_back:
Sie können eine optionale URL übergeben, um an eine andere Stelle zu gelangen, wenn http_refferrer leer ist.
quelle
Versuch das! (Dank dem Authlogic Plugin)
quelle
Kernfunktion
redirect_back
ist eine Kernfunktion von Rails 5+ und ist in der verfügbarActionController::Redirecting
Modul enthalten, das bereits in enthalten istApplicationController::Base
.EDIT: Quelle
quelle
redirect_to :back
.Vielleicht ist es spät, aber ich möchte meine Methode teilen, bei der auch Optionen erhalten bleiben:
Sie können es verwenden wie:
quelle
Fügen Sie dies ähnlich wie bei der Antwort von @ troex Ihrem Anwendungscontroller hinzu
Verwenden Sie es dann in Ihrem Controller
quelle
Vor kurzem bin ich auf dasselbe Problem gestoßen, bei dem ich entweder umleiten musste
:back
oder zu einer bestimmten Seite. Nachdem ich viele Lösungen gefunden hatte, fand ich schließlich diese, die einfach ist und das Problem zu lösen scheint:Wenn Sie
session
Details verwenden möchten , tun Sie dies im else-Teil des Codes.quelle