【问题标题】:Redirect making a PATCH request instead of GET重定向发出 PATCH 请求而不是 GET
【发布时间】:2014-08-18 05:50:29
【问题描述】:

我正在从我的 application.js 文件发出 ajax 补丁请求:

$.ajax({
     type: "PATCH",
     url: "/units/" + id,
     data: { 'var_1': var_1,
             'var_2': var_2,},
     success:function(){
            alert("Details saved successfully!!!");
     },
     dataType: "text"
 });

 // stop normal form submission behaviour
 $("#add_form").submit(function(e){ return false; }); 

这个请求被我的控制器成功接收,并且我的对象的属性被更新了。然后我尝试重定向到具有特定 id 的索引页面。

units_controller.rb

if @unit.update_attributes( ** data ** )
    flash.notice = "Successfully updated "
    redirect_to :controller => "/units", :action => "index", :id => params[:id]
end

我的问题是 redirect_to 调用包含 PATCH 方法请求,因此返回路由错误。根据我的 routes.rb 文件,它应该只是一个 GET 请求:

resources :units, except: :show
get '/units/index' => 'units#index'

知道为什么我的 redirect_to 调用包含 PATCH 方法请求以及如何将其更改为 GET 吗?

【问题讨论】:

  • 尝试“redirect_to units_path”
  • 如何在 ajax 请求中重定向?你希望你的浏览器做什么?
  • 您是否尝试过调试您的问题?

标签: ruby-on-rails ajax redirect


【解决方案1】:

“如果您使用 GET 或 POST 以外的 XHR 请求并在请求后重定向,则某些浏览器将使用原始请求方法跟随重定向。这可能会导致不良行为,例如双重 DELETE。要解决此问题,您可以返回 303。请参阅使用 GET 请求将遵循的其他状态代码。”取自ActionController::Redirecting#redirect_to的API文档。
顺便提一句。在这种情况下重定向不是一个合适的解决方案。你最好渲染一个合适的模板或者只更新资源而不是所有资源(如果可能的话)。

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 2015-06-11
    • 2017-06-28
    • 1970-01-01
    • 2019-11-30
    • 2011-10-20
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多