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

Ruby on Rails views子文件夹使用问题:报错uninitialized constant DogsBreeds

解决uninitialized constant DogsBreeds错误

错误原因

路由中使用了scope module: "dogs_breeds",Rails会自动尝试寻找**DogsBreeds模块下的对应控制器**,但你当前的HomeController是全局控制器,且手动创建的DogBreedsController类名(单数)与路由指定的模块名(复数dogs_breeds)不匹配,导致找不到对应常量。

可行解决方案

方案1:按模块规范调整控制器与视图结构

  1. 创建模块下的HomeController文件:app/controllers/dogs_breeds/home_controller.rb,代码如下:
module DogsBreeds
  class HomeController < ApplicationController
    def page1
    end

    def page2
    end
  end
end
  1. 调整视图路径为: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 控制器,调整以下内容:

  1. 修改控制器类名为复数:
# app/controllers/dogs_breeds_controller.rb
class DogsBreedsController < ApplicationController
  def page1
  end

  def page2
  end
end
  1. 修改路由指向该控制器:
get "/doberman", to: 'dogs_breeds#page1'
get "/chihuahua", to: 'dogs_breeds#page2'
  1. 视图路径调整为:views/dogs_breeds/page1.html.erb

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:41:05