Подтвердить что ты не робот

Обнаружена круговая зависимость при автозагрузке постоянной при загрузке постоянной

Прежде всего: я googled и использовал поиск здесь и нашел ответы на ту же ошибку, но на разных настройках. Может быть, я сломал еще раз;)

Ошибка:

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 Что я сделал здесь неправильно?

Спасибо за вашу помощь!

Edit:

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
4b9b3361

Ответ 1

Похоже, что основной проблемой может быть только то, что у вас нет имен, расположенных на вашем UserController в пространстве имен Admin, здесь:

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 загружается и автозагружается и так далее, он всегда обязательно определит модуль администратора, прежде чем пытаться загрузить классы под ним. Иногда вы получаете неизвестные постоянные ошибки. Причины немного сложны, но если вы хотите взглянуть на этот пост.

UPDATE

В Rails Edge теперь есть официальное руководство по теме Автопостановка констант.