ruby-on-rails - que - ruby on rails tutorial
Dependencia circular detectada durante la carga automática constante al cargar constante (1)
Antes que nada: busqué en Google y usé la búsqueda aquí y encontré las respuestas al mismo error pero en diferentes configuraciones. Tal vez rompí algo diferente;)
Error:
RuntimeError at /admin/users
Circular dependency detected while autoloading constant Admin::UsersController
La estructura es:
App => controllers => admin => users_controller.rb
Rutas:
namespace :admin do
resources :stuff
resources :users
end
Controlador de usuarios:
class UsersController < Admin::BaseController
def new
#code
end
def create
#code
end
def index
#code
end
private
def user_params
#code
end
end
Controlador base de administración
class Admin::BaseController < ApplicationController
layout ''admin''
before_filter :require_login
end
Usando: Rails 4.1.4, Ruby 2.1.2 ¿Qué hice mal aquí?
¡Gracias por tu ayuda!
Editar:
desarrollo.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
Parece que el problema principal puede ser simplemente que no haya asignado espacio de nombre a su UsersController en el espacio de nombres Admin
, aquí:
class UsersController < Admin::BaseController
Solución simple:
class Admin::UsersController < Admin::BaseController
Sin embargo, le sugiero que también divida sus espacios de nombres en distintas partes para evitar futuros dolores de cabeza. Entonces, en lugar de lo anterior, haz esto:
# app/controllers/admin/users_controller.rb
module Admin
class UsersController < Admin::BaseController
# ...
end
end
Y haga lo mismo con todos los demás controladores de espacio de nombres, como:
# app/controllers/admin/base_controller.rb
module Admin
class BaseController < ApplicationController
# ...
end
end
De esta forma, a medida que Rails carga y carga automáticamente, y así sucesivamente, siempre será seguro definir el módulo Admin antes de intentar cargar las clases debajo de él. A veces obtienes errores constantes desconocidos. El razonamiento es un poco complejo, pero si quieres echarle un vistazo echa un vistazo a esta publicación .
ACTUALIZAR
En Rails Edge, ahora hay una guía oficial sobre el tema de la carga automática de constantes .