我試圖將未登錄的用戶直接重定向到登錄窗口,這是一個引導模態窗口。Rails:重定向到調用Ajax
我在ApplicationController
寫了一個稱爲logged_in_user
方法:
def logged_in_user
unless !current_user.nil?
flash[:danger] = "Please log in"
redirect_to root_url
end
end
的login_url
路線sessions#new
,我定義如下:
(sessions_controller.rb)
def new
respond_to do |format|
format.html
format.js
end
end
這裏認爲,redirect_to root_url
點:
<!-- Login Window -->
<div id="login-window" class="modal fade" role="dialog" aria-labelledby="login" aria-hidden="true"></div>
這裏是new.js.erb
當sessions#new
稱爲該被執行:
$("#login-window").html("<%= escape_javascript(render 'sessions/new') %>");
因此登錄表單,這是在app/views/sessions
_new.html.erb
,將顯示爲彈出窗口一旦sessions#new
被調用。
除了它必須被處理爲JS而不是HTML。所以,我有下面的鏈接,這是在_header.html.erb
和可用的所有意見,以確保這樣的話:
<%= link_to "Log in", login_path, {remote: true, 'data-toggle' => "modal", 'data-target' => '#login-window'} %>
鏈接被點擊時,這工作得很好。這就是爲什麼我選擇做redirect_to root_url
而不是redirect_to login_url
在logged_in_user
方法,因爲後一種方法導致「缺少模板錯誤」。
但我真正想要的是將用戶直接重定向到彈出窗口,而不是先將它們重定向到root_url,並且必須單擊「登錄」鏈接才能輸入表單。 換句話說,我需要一種方式來通過發出Ajax請求將用戶重定向到sessions#new
,以便sessions#new
可以作爲JS處理。
我試過logged_in_user
方法中所希望的重定向下面的方法,其中沒有工作:
render js: "window.location = <%= escape_javascript(render 'sessions/new') %>"
render js: "window.location = '/sessions/new'"
redirect_to login_url, format: "js"
任何建議,將不勝感激!
謝謝你的回答。它很接近!雖然所需的視覺效果(即淡入淡出)是通過您的代碼實現的,但表單本身並未出現。 – Taiga
什麼是點加載會話/新由'$(「#login-window」)。html(「<%= escape_javascript(render'sessions/new')%>」);'? 當數據是動態的時候使用ajax。你'會議/新'是動態的HTML?我想不是。 只需通過渲染加載html.erb。 表單必須出現,如果它的模態引導和沒有JS錯誤。 – cruncher
那麼,這只是讓用戶「登錄」名爲「登錄」的鏈接。無論如何,這個問題是從你的建議中解決的。我會自己發佈答案。非常感謝您提出富有洞察力的建議! – Taiga