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

Rails嵌套资源配置后products无index路由、创建产品跳转报错

问题根因

你遇到的路由异常是路由配置语法错误导致的:Rails 中单数resource用于声明单资源(即对应模型全局仅存在1条记录的场景),不会生成index路由,也不会在路径规则中注入:id参数,完全不符合你当前一对多嵌套资源的需求。
你配置的resource :products会让/product_categories/:product_category_id/products直接映射到products#show动作,且该动作不需要传递产品ID,和你控制器中需要params[:id]查询产品的逻辑冲突,就会触发「无法查询无ID的Product」报错。

修复步骤
  1. 修改config/routes.rb配置,将嵌套的单数resource改为复数resources
Rails.application.routes.draw do
  root 'product_categories#index'
  resources :product_categories do
    resources :products # 此处修改为复数
  end
end

修改后执行rails routes验证,会生成标准的嵌套产品路由:

  • /product_categories/:product_category_id/products映射到products#index
  • /product_categories/:product_category_id/products/:id映射到products#show等单产品动作
  1. 修正ProductsController中的跳转逻辑,所有产品相关路由都需要携带父级分类参数:
  • 创建产品成功后如果要跳转到产品详情页,将跳转路径改为product_category_product_path(@product_category, @product)
  • 更新产品成功后的跳转路径同样改为product_category_product_path(@product_category, @product)
  • 删除产品成功后的跳转路径改为product_category_products_path(@product_category)
  1. 同步修正所有视图文件中产品相关的路径引用,统一使用嵌套路由格式,避免后续报错。

内容的提问来源于stack exchange,提问作者Patrick Vellia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:54:07