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时,请求没有匹配到预期的#newaction,反而被#showaction处理(因为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
相关产品推荐
相关产品推荐

