You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails路由问题:GET请求无法匹配PUT/PATCH路由,路径单复数异常

问题分析与解决

核心问题

你的路由配置里,scheduling_details资源仅启用了:create, :destroy, :update, :index动作,未包含:show动作,且update对应的路由只接受PATCH/PUT请求,不支持GET请求。而link_to默认发送GET请求,这直接导致路由不匹配错误。

另外你疑惑的复数路径是Rails的约定:单个资源的路由辅助方法(比如update对应的scheduling_scheduling_detail_path)生成的路径是复数形式/scheduling/scheduling_details/:id,这是正常设计,并非错误。

解决方案

根据你的实际需求分两种情况处理:

情况1:触发update动作(比如点击"Yes"更新资源)

需要给link_to指定请求方法为PATCH或PUT,因为update路由仅接受这两种请求:

<%= link_to "Yes", scheduling_scheduling_detail_path(@scheduling_detail), method: :patch %>

注意:该方式依赖Rails UJS,若用户浏览器禁用JavaScript会失效。更稳妥的方式是用button_to,它会自动生成表单发送请求:

<%= button_to "Yes", scheduling_scheduling_detail_path(@scheduling_detail), method: :patch %>

情况2:打开资源详情页(需要GET请求的详情页面)

需在路由配置中添加:show动作,让Rails生成对应的GET路由:

namespace :scheduling do
  resources :scheduling_details, only: [:create, :destroy, :update, :index, :show]
end

添加后,rake routes会生成对应GET路由:

scheduling_scheduling_detail GET    /scheduling/scheduling_details/:id(.:format) scheduling/scheduling_details#show

此时再使用原link_to代码即可正常访问。

关于手动路径的错误

你手动编写的单数路径/scheduling/scheduling_detail/:id不符合Rails路由约定,你的路由配置中根本不存在该路径的任何请求方法,因此无论是否带ID都会报错,建议始终使用Rails生成的路由辅助方法,避免手动拼接路径。

内容的提问来源于stack exchange,提问作者Jeff Zivkovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:45:17