Rails 6.1 form_with配置method: patch后仍发POST请求路由报错问题
排查解决步骤
- 检查Rack::MethodOverride中间件配置
Rails 依赖该中间件解析_method隐藏字段转换请求类型,默认开启,若项目修改过中间件配置,需确认config/application.rb中存在如下配置:
配置修改后需重启服务生效。config.middleware.use Rack::MethodOverride - 检查是否有前端逻辑拦截表单提交
自定义的AJAX提交逻辑、第三方表单组件如果直接读取form标签原生method属性提交,不会自动处理_method隐藏字段,会直接发送POST请求。如果是自行实现的异步提交,有两种修正方案:- 提交时将
_method字段纳入请求参数 - 给请求添加
X-HTTP-Method-Override: PATCH请求头
- 提交时将
- 检查是否缺少Rails原生JS依赖
form_with默认开启远程提交(remote: true),依赖@rails/ujs或Turbo处理_method字段转换,如果项目没有引入上述依赖,可给表单添加local: true参数走常规表单提交流程:<%= form_with(model: [:admin, contest], method: :patch, local: true) do |form| %> ... <% end %> - 确认路由配置正确
执行rails routes命令,检查对应更新路由是否为PATCH /admin/contests/:id,确认命名空间、路径规则没有拼写错误。
内容的提问来源于stack exchange,提问作者Sticky
相关产品推荐
相关产品推荐

