redirect_to在Ruby on Rails中不起作用

时间:2018-07-10 22:45:13

标签: ruby-on-rails ajax redirect url-redirection

在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。为什么会发生这种情况?

1 个答案:

答案 0 :(得分:2)

如果您执行ajax请求,则可能会请求jsonjs格式。但是您的redirect_tohtml格式的响应,因此它什么也没做。

根据您要求的格式,您可以以不同的方式处理错误。

如果您请求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