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