Rails路由错误:/assets前缀丢失引发No route matches问题
Rails路由错误排查:请求路径不匹配问题
错误信息
访问目标URL后,日志抛出以下路由错误:
ActionController::RoutingError (No route matches [GET] "/1/day_schedules")
当前路由配置
执行rails routes命令得到的路由列表:
$ rails routes Prefix Verb URI Pattern Controller#Action root GET / home#index asset_day_schedules GET /assets/:asset_id/day_schedules(.:format) day_schedules#index POST /assets/:asset_id/day_schedules(.:format) day_schedules#create new_asset_day_schedule GET /assets/:asset_id/day_schedules/new(.:format) day_schedules#new edit_day_schedule GET /day_schedules/:id/edit(.:format) day_schedules#edit day_schedule GET /day_schedules/:id(.:format) day_schedules#show
问题矛盾点
实际访问的URL是http://localhost:3000/assets/1/day_schedules,但日志显示系统尝试匹配的是/1/day_schedules,而非预期的/assets/:asset_id/day_schedules路由。
排查与解决建议
- 检查路由定义顺序:Rails路由按从上到下的顺序匹配,确认是否在
asset_day_schedules路由之前存在类似/:id/day_schedules的路由,这类路由会优先拦截请求,导致正确路由无法匹配。 - 验证实际请求URL:用浏览器开发者工具的网络面板查看发送的真实请求路径,排除前端代码生成URL错误、浏览器缓存等问题导致的路径缺失
/assets前缀。 - 确认资源嵌套配置:确保
config/routes.rb中day_schedules是正确嵌套在assets下的,正确写法应为:
resources :assets do resources :day_schedules end
若嵌套语法错误或层级不对,会导致路由生成异常。
- 重启Rails服务器:路由修改后未重启服务器可能导致新路由未生效,重启服务后再测试请求。
内容的提问来源于stack exchange,提问作者Kevin W.
相关产品推荐
相关产品推荐

