Rails嵌套资源路由报错uninitialized constant TasksController求助
问题原因
你当前的报错核心是路由映射的控制器和实际控制器的路径/命名空间不匹配:
- 你默认生成的嵌套路由
resources :tasks对应的控制器是顶层的TasksController(对应路径app/controllers/tasks_controller.rb) - 但你实际的控制器放在
app/controllers/users目录下,属于Users命名空间下的Users::TasksController,路由找不到对应控制器所以抛出异常
解决方案
这里提供两种可行的处理方案,按需选择即可:
方案一:保留控制器的Users命名空间
修改routes.rb里的路由配置,指定嵌套tasks路由对应的控制器路径:
resources :users do # 新增controller参数指定控制器位置 resources :tasks, controller: 'users/tasks' do collection do # 这里因为已经指定了controller,to参数可以省略,直接写post 'tasks-info', format: 'json'即可 post 'tasks-info', to: 'users/tasks#tasks_info', format: 'json' end end end
同时确认app/controllers/users/tasks_controller.rb的类定义正确声明了命名空间:
class Users::TasksController < ApplicationController def show end # 其他方法 end
修改后执行rake routes可以看到路由对应的控制器变成users/tasks#show,和实际控制器匹配即可正常访问。
方案二:移除控制器的命名空间
如果不需要给tasks控制器单独做Users下的命名空间区分,直接调整文件位置即可:
- 将
app/controllers/users/tasks_controller.rb移动到app/controllers/根目录 - 将
app/views/users/tasks/目录下的视图文件移动到app/views/tasks/目录 - 确认控制器类名为普通的
class TasksController < ApplicationController
原有路由不需要修改即可正常访问。
内容的提问来源于stack exchange,提问作者cweih
相关产品推荐
相关产品推荐

