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

如何在Rails符号式嵌套单动作路由中添加param参数?

问题分析与解决

你遇到的404是因为符号式路由定义没有显式指定路径中的内层参数占位符,导致生成的路由路径和预期不符。

原因

原字符串写法生成的路径是/abilities/:ability_slug/company/:slug(外层abilities的param: :slug会被Rails自动重命名为:ability_slug避免参数名冲突),而你用符号式delete :company, ...时,Rails默认生成的路径是/abilities/:ability_slug/company,没有包含内层的:slug参数,所以访问带slug的路径时无法匹配路由,返回404。

正确的符号式写法

需要通过path选项显式指定包含内层参数的路径模板,保持和原字符串写法一致的路径结构:

resources :abilities, param: :slug do
  delete :company, 
         controller: :ability_companies, 
         action: :destroy, 
         path: 'company/:slug'
end

这样生成的路由路径就和原写法完全一致,同时保持了符号式定义的风格。

如果需要明确指定内层参数的名称(避免和外层冲突),也可以结合param选项:

resources :abilities, param: :slug do
  delete :company, 
         controller: :ability_companies, 
         action: :destroy, 
         path: 'company/:company_slug',
         param: :company_slug
end

这种写法会把内层参数命名为:company_slug,在控制器中可以通过params[:company_slug]获取,避免和外层的params[:ability_slug]混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:27:26