Ich versuche, nicht eingeloggte Benutzer direkt zu einem Anmeldefenster umzuleiten, das ein modales Bootstrap-Fenster ist.Rails: Redirect mit Aufruf an Ajax
Ich schrieb eine Methode logged_in_user
in ApplicationController
genannt:
def logged_in_user
unless !current_user.nil?
flash[:danger] = "Please log in"
redirect_to root_url
end
end
Die login_url
Routen sessions#new
, die ich wie unten definiert:
(sessions_controller.rb)
def new
respond_to do |format|
format.html
format.js
end
end
Hier ist der Ansicht ist, dass redirect_to root_url
Punkte:
<!-- Login Window -->
<div id="login-window" class="modal fade" role="dialog" aria-labelledby="login" aria-hidden="true"></div>
Hier ist new.js.erb
, die ausgeführt wird, wenn sessions#new
genannt wird:
$("#login-window").html("<%= escape_javascript(render 'sessions/new') %>");
So ist das Login-Formular, das _new.html.erb
in app/views/sessions
ist, wird als ein Popup-Fenster angezeigt, sobald die sessions#new
genannt wird.
Außer, dass es als JS statt HTML verarbeitet werden muss. So habe ich den folgenden Link, das in allen Ansichten in den _header.html.erb
und verfügbar ist, um sicherzustellen, dass dies der Fall ist:
<%= link_to "Log in", login_path, {remote: true, 'data-toggle' => "modal", 'data-target' => '#login-window'} %>
Dies funktioniert gut, wenn der Link angeklickt wird. Aus diesem Grund entschied ich mich für redirect_to root_url
anstelle von redirect_to login_url
in logged_in_user
Methode, da der letztgenannte Ansatz in "Fehlender Template-Fehler" resultiert.
Aber was ich wirklich will ist, dass Benutzer direkt zum Popup-Fenster umgeleitet werden, anstatt dass sie zuerst zu root_url weitergeleitet werden und auf "Login" klicken müssen, um das Formular einzugeben. Mit anderen Worten, ich brauche eine Möglichkeit, Benutzer irgendwie auf die sessions#new
umleiten, indem Sie eine Ajax-Anfrage, so dass sessions#new
kann als JS verarbeitet werden.
ich folgende Ansätze für die gewünschte Umleitung innerhalb logged_in_user
Methode versucht, von denen keines gearbeitet:
render js: "window.location = <%= escape_javascript(render 'sessions/new') %>"
render js: "window.location = '/sessions/new'"
redirect_to login_url, format: "js"
werden Anregungen sehr dankbar!
Vielen Dank für Ihre Antwort. Es war knapp! Obwohl der gewünschte visuelle Effekt (dh Fade) durch Ihren Code erreicht wurde, erschien das Formular selbst nicht. – Taiga
what point load session/new von '$ (" # login-window "). Html (" <% = escape_javascript (render 'sessions/new')%> ");'? Verwenden Sie Ajax, wenn Daten dynamisch sind. Sie "Sitzungen/neu" ist dynamisch HTML? Ich denke nicht. Laden Sie einfach in html.erb durch Rendern. Formular muss erscheinen, wenn es Modal Bootstrap und keine js Fehler ist. – cruncher
Nun, es ist nur für Benutzer "cliking" den Link namens "Anmelden". Wie auch immer, das Problem wurde durch Ihren Vorschlag gelöst. Ich werde die Antwort selbst veröffentlichen. Vielen Dank für Ihren aufschlussreichen Rat! – Taiga