Ruby on Rails views子文件夹使用问题:报错uninitialized constant DogsBreeds
解决
uninitialized constant DogsBreeds错误 错误原因
路由中使用了scope module: "dogs_breeds",Rails会自动尝试寻找**DogsBreeds模块下的对应控制器**,但你当前的HomeController是全局控制器,且手动创建的DogBreedsController类名(单数)与路由指定的模块名(复数dogs_breeds)不匹配,导致找不到对应常量。
可行解决方案
方案1:按模块规范调整控制器与视图结构
- 创建模块下的HomeController文件:
app/controllers/dogs_breeds/home_controller.rb,代码如下:
module DogsBreeds class HomeController < ApplicationController def page1 end def page2 end end end
- 调整视图路径为:
views/dogs_breeds/home/page1.html.erb(原路径views/home/dogs_breeds不符合模块视图的命名规则)
方案2:移除路由的module配置(无需模块)
修改routes.rb,去掉scope module部分:
get "/doberman", to: 'home#page1' get "/chihuahua", to: 'home#page2'
同时把视图文件移到views/home/page1.html.erb,直接使用全局的HomeController。
方案3:使用独立的DogsBreedsController
如果想单独用 breeds 控制器,调整以下内容:
- 修改控制器类名为复数:
# app/controllers/dogs_breeds_controller.rb class DogsBreedsController < ApplicationController def page1 end def page2 end end
- 修改路由指向该控制器:
get "/doberman", to: 'dogs_breeds#page1' get "/chihuahua", to: 'dogs_breeds#page2'
- 视图路径调整为:
views/dogs_breeds/page1.html.erb
内容的提问来源于stack exchange,提问作者SEVENELEVEN
相关产品推荐
相关产品推荐

