ruby-on-rails - 重定向发出 PATCH 请求而不是 GET

标签 ruby-on-rails ajax redirect

我正在从我的 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; }); 

我的 Controller 成功接收到这个请求,并且更新了我的对象的属性。然后我尝试重定向到具有特定 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 吗?

最佳答案

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

关于ruby-on-rails - 重定向发出 PATCH 请求而不是 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357048/

相关文章:

redirect - URL 片段和 302 重定向

asp.net-mvc-2 - 将用户从 SEO 之类的 url 重定向到 ASP.NET MVC 2 中的 Controller 操作

java - struts2中如何返回invoke Action

ruby-on-rails - Elastic Search 与 Sunspot 的功能比较

ruby-on-rails - 设计 - 快速通知

javascript - 如何在 AJAX 调用中接收 Yaml 内容?

javascript - 422(无法处理的实体)使用 Rails 进行 POST

ruby-on-rails - Rails 5.2 Net::SMTPAuthenticationError - 535 身份验证失败:发送电子邮件时禁用帐户(Localhost 和 Heroku)

javascript - 如何使用 ajax in rails 将数据从 Controller 传递到 View

javascript - xmlhttp.status 在本地主机 XAMPP 中返回 0