Rails报错No route matches [GET] "/show/:id",Show路由异常
问题解决:Rails中Gods列表页查看链接路由错误
核心问题分析
- 路由规则不匹配:你硬编码了路径字符串
'gods/show/:id',但Rails的RESTful路由规范中,单个资源的详情路径是/gods/:id,而非/show/:id。 - link_to参数误用:循环中遍历的是
@g.each do |x|,每个资源对象是x,而非集合@g,之前用god_path(@g)会因为传入集合而非单个对象导致nil id错误。
分步解决
1. 配置RESTful路由
打开config/routes.rb,添加RESTful路由规则,自动生成index、show等标准路由:
Rails.application.routes.draw do resources :gods end
执行rails routes命令可查看生成的路由,其中show路由的辅助方法为god_path,对应路径/gods/:id。
2. 修正index视图的查看链接
修改index视图中的link_to代码,传入循环中的单个对象x,使用路由辅助方法生成正确路径:
<td><%= link_to 'view', god_path(x) %></td>
此时每个链接会生成对应God对象的详情路径(如/gods/1、/gods/2)。
3. 优化控制器跳转(可选)
控制器create方法中的硬编码跳转可替换为标准路由辅助方法,更符合Rails规范:
redirect_to gods_path
验证
重启Rails服务器,访问index页面,点击"view"链接即可正常跳转到对应God对象的详情页。
内容的提问来源于stack exchange,提问作者BrownboyD
相关产品推荐
相关产品推荐

