我正在从我的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方法请求,因此返回路由错误。它应该只是一个GET请求,根据我的routes.rb文件:
resources :units, except: :show
get '/units/index' => 'units#index'
知道我的redirect_to调用包含PATCH方法请求以及如何将其更改为GET的原因吗?
答案 0 :(得分:3)
"如果您使用GET或POST以外的XHR请求并在请求后重定向,则某些浏览器将使用原始请求方法跟踪重定向。这可能会导致不良行为,例如双重DELETE。要解决此问题,您可以返回303.请参阅使用GET请求将遵循的其他状态代码。"取自ActionController::Redirecting#redirect_to的API文档。
顺便说一句。在这种情况下重定向不是一个合适的解决方案。你最好应该渲染一个合适的模板,或者只更新资源而不是所有资源(如果可能的话)。