2 votes

Erreur de constante non initialisée BaseController lors de l'utilisation de l'espace de noms admin

J'ai un espace de noms admin comme tel :

  namespace :admin do
    resources :users
    resources :base
  end

Avec la structure de répertoire suivante :

/app/controllers/
        + admin
            - base_controller.rb
            - users_controller.rb
        - users_controller.rb
        - application_controller.rb

Je dois emballer admin/users_conroller.rb dans un module Admin end sinon j'obtiens un Uninitialized constant BaseController erreur :

class Admin::BaseController < ApplicationController
end

# Works fine
module Admin
  class UsersController < BaseController
  end
end

# Breaks with error
class Admin::UsersController < BaseController
end

Une idée de la raison de ce phénomène ? J'utilise Rails 3.2.

7voto

Deefour Points 17281

Les espaces de noms correspondent à des répertoires, les noms de fichiers soulignés sont mis en majuscules pour les noms de classes.

class Some::DeeplyNested::BaseActionsController < ApplicationController

doit être dans app/controllers/some/deeply_nested/base_actions_controller.rb pour que les rails le trouvent.

Dans votre code, il n'y a pas de app/controllers/base_controller.rb Ainsi BaseController en

class Admin::UsersController < BaseController

ne pointe vers aucune classe connue de Rails. Vous devez lui donner l'admin (comme votre définition de classe pour BaseController)

class Admin::UsersController < Admin::BaseController
end

Le code ci-dessus et le code de travail de votre question sont identiques.

module Admin
  class UsersController < BaseController
  end
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X