如何修复Rails根路径"/"的No route matches [POST]/[OPTIONS]错误
解决方案
问题原因
你当前的全局捕获路由match '*url' => 'errors#not_found', via: :all里,*url仅会匹配非空的路径片段,根路径/没有任何路径片段,所以不会被这个规则命中。而root 'errors#not_found'仅默认处理GET请求,导致POST、OPTIONS等方法访问根路径时触发路由未匹配错误。
解决方法
方法1:单独为根路径添加全HTTP方法路由
在routes.rb中,放在root配置之后、全局捕获路由之前,添加一行:
match '/', to: 'errors#not_found', via: :all
这个路由会直接匹配所有HTTP方法的根路径请求,将它们转发到errors#not_found动作。
方法2:修改全局捕获路由,使其兼容空路径
把原有的全局捕获路由修改为:
match '(*url)', to: 'errors#not_found', via: :all, constraints: { url: /.*/ }
这里的(*url)配合constraints强制匹配包括空字符串在内的所有路径,根路径的任何方法请求都会被捕获。
验证
修改后重启服务器,测试POST /和OPTIONS /请求,应该会返回你预设的404响应,不再出现路由未匹配的错误日志。
内容的提问来源于stack exchange,提问作者Toby
相关产品推荐
相关产品推荐

