【问题标题】:Circular dependency detected while autoloading constant when loading constant加载常量时自动加载常量时检测到循环依赖
【发布时间】:2014-10-17 02:51:03
【问题描述】:

首先:我用谷歌搜索并使用了这里的搜索,找到了相同错误的答案,但设置不同。也许我打破了一些不同的东西;)

错误:

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 我在这里做错了什么?

感谢您的帮助!

编辑:

开发.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

【问题讨论】:

  • 请显示development.rb

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

看起来主要问题可能只是您没有在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多