[英]how to respond to an ajax call in before_filter
我寫了一個像這樣的before_filter:
def authenticate_user
if request.xhr?
flash.now[:alert] = 'Error'
render :partial => "js_helpers/popover", :formats => :js
else
authenticate_user!
end
end
但是,它沒有按預期工作。 日志文件顯示:
Rendered js_helpers/_popover.js.erb (0.1ms)
Filter chain halted as :authenticate_user rendered or redirected
js代碼的功能是顯示一個顯示flash消息的彈出框。 但看起來js代碼根本不是很興奮。
所以,我改變了方向:
def authenticate_user
if request.xhr?
flash.now[:alert] = 'Error'
render :js => "window.location = '/users/sign_up'"
else
authenticate_user!
end
end
相反,我想重定向到注冊頁面。
但是,仍然存在問題。 閃光似乎不起作用
我怎樣才能實現我的目標:
當請求是ajax調用時,執行javascript代碼或redirect_to新頁面。 在這兩種情況下,我需要在flash中存儲一些消息。
另外,javascript代碼很長,所以我需要把它放在一個文件中。 如何使用render:js在文件中執行javascript?
我認為,您應該返回客戶端將理解的json響應,而不是嘗試為客戶端執行javascript代碼。
def authenticate_user
if request.xhr?
render :json => { alert: 'Error', redirect: sign_up_path }, :status => 403
else
authenticate_user!
end
end
在您的ajax調用中,捕獲403狀態代碼,顯示警報消息,並重定向到給定的URL。 你應該能夠將它作為403(或任何狀態代碼似乎最合適)的標准鈎子,以便它可以像before_filter一樣干燥。
我認為使用rails'內置重定向是你正在尋找的。
def authenticate_user
if request.xhr?
flash[:alert] = 'Error'
redirect_to user_sign_up
else
authenticate_user!
end
end
這應該重定向並填寫flash消息
以下是導軌指南中的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.