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

Rails 5.1.4未生成controller#new路由,请求被#show处理求助

Rails 5.1.4中#new路由缺失、请求被#show处理的问题解决

我之前也踩过类似的Rails路由坑,结合你描述的情况和最终的解决办法,来梳理下这个问题的来龙去脉:

问题场景

  • 使用Rails 5.1.4版本,向routes.rb添加路由配置后,大部分路由都正常生成,但唯独#new路由消失了
  • 尝试访问localhost:3001/somethings/new时,请求没有匹配到预期的#new action,反而被#show action处理(因为Rails会把new当作:id参数匹配到GET /somethings/:id路由)
  • 最初尝试添加复数后缀后,问题依然没有解决

解决方法

这个问题的核心是路由定义时没有显式包含:new和:create动作,导致Rails没有生成对应的RESTful路由。

当你在resources中明确指定only参数并包含:new、:create后:

resources :documents, only: [:show, :index, :update, :edit, :new, :create]

Rails就能正确生成GET /documents/new对应的#new路由,不会再把该请求误匹配到#show路由了。

如果你的业务场景不需要限制资源路由的动作范围,直接使用resources :documents会更简洁,它会自动生成所有7个RESTful路由,包括#new和#create。

内容的提问来源于stack exchange,提问作者Ilya Libin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:58:07