web-dev-qa-db-fra.com

Erreur de routage - constante non initialisée

Je ne pouvais pas résoudre ce problème dans Rails 3.2.12, il me manque peut-être quelque chose.

config/routes.rb

get "home/index"
root :to => "home#index"
devise_for :users, :only => :omniauth_callbacks
match 'users/auth/:provider/callback' => 'authentications#create'
match '/auth/:provider/signout' => 'authentications#signout'

app/controllers/authentication_controller.rb

class AuthenticationsController < ApplicationController
  ...
end

app/models/authentication.rb

class Authentication < ActiveRecord::Base
  ...
end

Je pense que cela devrait fonctionner avec mes connaissances actuelles, mais il y a quelque chose qui me manque.

Ma gentille question serait de dire ce qui ne va pas, s'il vous plaît.

Erreur de montage

uninitialized constant AuthenticationsController

Ceci est un message qui apparaît à http://localhost:3000/auth/facebook/signout

28
Davit

Rails nécessite que le nom du fichier corresponde au nom de la classe. Par conséquent, vous devez renommer app/controllers/authentication_controller.rb en app/controllers/authentications_controller.rb.

49
alf

Bien que l'on ait répondu à cette question, j'ai trouvé un autre cas où j'avais cette erreur et je voulais la documenter ici pour la postérité. 

Si vous avez deux itinéraires similaires définis dans votre fichier routes.rb sans les contrôleurs correspondants, vous obtiendrez l'erreur constante non initialisée.

Étapes à suivre pour reproduire:

Rails generate scaffold foobar name:string
bundle exec rake db:migrate

ajoutez resources: foobars à routes.rb dans une nouvelle étendue (remarque: la ressource foobars a déjà été automatiquement ajoutée en haut de votre route.rb lors de la génération d'un échafaudage) comme suit:

  resources :foobars

  ########################################
  # SUPER
  ########################################

  constraints Host: ENV['SUPER_Host'] do
    scope module: :super do
      resources :foobars
      get '/' => 'super#index'

    end
  end

Maintenant, déplacez/app/views/foobars vers/app/vues/super/foobars .__ et déplacez /app/controllers/foobars_controller.rb vers/app/controllers/super/foobars_controller.rb Assurez-vous que foobars_controller.rb se trouve dans le module Super:

class Super::FoobarsController < ApplicationController

Allez maintenant à votre.dev.server/foobars / Vous devriez obtenir cette erreur: Erreur de routage constante non initialisée FoobarsController

Maintenant, supprimez resources: foobars du début de routes.rbIl devrait fonctionner maintenant!

Il m'a fallu un certain temps pour comprendre pourquoi j'avais cette erreur et je ne savais pas que générer l'échafaud ajoutait une entrée dans routes.rb

5
Jared Menard

Bien que cela ne réponde pas à votre question spécifique, j'ai reçu l'échec avec ce qui suit dans mes routes.rb

resources :republishes  do
    post '/attempt_all', :to => 'republishes/#attempt_all' . . .

que j'ai changé pour

resources :republishes  do
    post '/attempt_all', :to => 'republishes#attempt_all' . . .

En supprimant la barre oblique corrigée mon problème.

0
Nathan Pierce