首先:我用谷歌搜索并在此处使用搜索,并在不同的设置上找到相同错误的答案。也许我打破了别的;)
错误:
RuntimeError at /admin/users
Circular dependency detected while autoloading constant Admin::UsersController
结构是:
App => controllers => admin => users_controller.rb
路线:
namespace :admin do
resources :stuff
resources :users
end
用户控制器:
class UsersController < Admin::BaseController
def new
#code
end
def create
#code
end
def index
#code
end
private
def user_params
#code
end
end
管理员控制器
class Admin::BaseController < ApplicationController
layout 'admin'
before_filter :require_login
end
使用:Rails 4.1.4,Ruby 2.1.2 我在这里做错了什么?
感谢您的帮助!
编辑:
development.rb
Rails.application.configure do
config.cache_classes = false
config.eager_load = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.raise_delivery_errors = false
config.active_support.deprecation = :log
config.active_record.migration_error = :page_load
config.assets.debug = true
config.assets.raise_runtime_errors = true
end
答案 0 :(得分:41)
看起来主要问题可能只是您没有在Admin
命名空间下命名您的UsersController,此处:
class UsersController < Admin::BaseController
简单修复:
class Admin::UsersController < Admin::BaseController
但是,我建议您将命名空间划分为不同的部分以避免将来的头痛。所以不要做以上事情,请执行以下操作:
# app/controllers/admin/users_controller.rb
module Admin
class UsersController < Admin::BaseController
# ...
end
end
对所有其他命名空间控制器执行相同操作,例如:
# app/controllers/admin/base_controller.rb
module Admin
class BaseController < ApplicationController
# ...
end
end
这样,当Rails加载和自动加载等等时,它总是会在尝试加载其下的类之前确定定义Admin模块。有时你会得到未知的常数错误。推理有点复杂,但如果您想查看this post。
在Rails Edge上,现在有an official Guide on the topic of Auto Loading of Constants。