Rails 5拆分多路由文件提示uninitialized constant General错误如何解决
问题原因
Rails 应用启动时,config/routes.rb 的加载时机远早于自动加载机制(autoload_paths)的初始化完成,你配置的路由目录自动加载规则此时还未生效,因此无法识别General常量。
解决方案
方案1:快速适配现有代码
直接在路由文件顶部手动引入对应模块文件,跳过自动加载即可:
# config/routes.rb 顶部新增这一行 require_relative './routes/general' Rails.application.routes.draw do root to: 'summary#index' extend General end
修改后无需调整其他配置,重启应用即可生效。
方案2:使用Rails原生路由拆分(更推荐)
Rails 5.0+ 已经原生支持多路由文件拆分,不需要自己封装模块,写法更简洁不易出错:
- 调整
/config/routes/general.rb内容,移除模块包裹,直接写路由逻辑:
# 直接保留路由内容即可,不需要定义模块 devise_for :users, controllers: { sessions: 'users/sessions' }
- 修改
config/routes.rb,用原生draw方法加载拆分的路由文件:
Rails.application.routes.draw do root to: 'summary#index' draw :general end
- 可以删除
application.rb中添加的config.autoload_paths相关配置,无需额外配置自动加载。
内容的提问来源于stack exchange,提问作者Ben Bagley
相关产品推荐
相关产品推荐

