在Rails端,我有两个控制器:A_controller和B_controller。当客户端执行A_controller中的一项操作时,它可能会获得异常。当发生异常时,我想将Rails重定向到新页面(在B_controller下)。因此,以下是我的工作:
class AController < ApplicationController
rescue_from SampleException, :with => :redirect_to_page_b
def redirect_to_page_b
redirect_to "/b/#{@id}" # a URL here
end
end
但是,当浏览器没有重定向到新页面时,我使用ajax调用进行调试,并注意到响应成功,状态为200。为什么会发生这种情况?
答案 0 :(得分:2)
如果您执行ajax请求,则可能会请求json
或js
格式。但是您的redirect_to
是html
格式的响应,因此它什么也没做。
根据您要求的格式,您可以以不同的方式处理错误。
如果您请求js
格式,则可以将救援内容保留在控制器中并执行以下操作:
def redirect_to_page_b
respond_to do |format|
format.html { redirect_to "/b/#{@id}" }
format.js { render js: "window.location = '/b/#{@id}'" }
end
end
请求json
格式,我将从控制器中删除rescue
块并让错误发生。然后,我将在ajax调用的fail
块中处理它。
或者,如果您只需要处理特定类型的异常,则仍然可以继续进行救援,并使用json进行响应:
render json: { redirect_link: "/b/#{@id}" }
然后在ajax调用的done
回调中,您可以检查响应中是否存在redirect_link
,如果存在,则将其分配给window.location
。