2013-04-06 3 views
26

Ich konnte das nicht in Rails 3.2.12 beheben, vielleicht fehlt mir etwas.Routing-Fehler - nicht initialisierte Konstante

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/Controller/authentication_controller.rb

class AuthenticationsController < ApplicationController 
    ... 
end 

app/Modelle/authentication.rb

class Authentication < ActiveRecord::Base 
    ... 
end 

Ich denke, es sollte mit meinem derzeitigen Wissen funktionieren, aber es gibt etwas, das ich vermisse.

Meine freundliche Frage wäre zu sagen, was falsch ist, bitte.

Rounting Fehler

uninitialized constant AuthenticationsController

Dies ist eine Nachricht, die an http://localhost:3000/auth/facebook/signout

Antwort

43

Rails zeigt nach oben erfordert den Dateinamen den Klassennamen übereinstimmen. Daher sollten Sie app/controllers/authentication_controller.rb in app/controllers/authentications_controller.rb umbenennen.

+2

oh. Danke @ Alfonso. Ich habe den Controller auf diese Weise erstellt: "rails g controller authentication", also wurde die Datei nach "authentication_controller.rb" benannt, vielleicht habe ich den Klassennamen geändert. Vielen Dank, dass Sie auf eine so bekannte Frage geantwortet haben. – Davit

+1

@Davit Tipp: Sie sollten beim Erstellen von Controllern immer Plural verwenden. – Bonifacio2

4

Obwohl diese Frage beantwortet wurde, fand ich einen anderen Fall, in dem ich diesen Fehler erhielt und wollte es hier für die Nachwelt dokumentieren.

Wenn Sie zwei ähnliche Routen in Ihrer routes.rb-Datei ohne die entsprechenden Controller definiert haben, erhalten Sie den nicht initialisierten konstanten Fehler.

Schritte zum Reproduzieren:

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

Ressourcen hinzufügen: foobars zu einem neuen Bereich routes.rb (Anmerkung: die foobars Ressource bereits an die Spitze Ihres routes.rb während Gerüst Generation automatisch hinzugefügt diese) wie:

resources :foobars 

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

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

    end 
    end 

Jetzt /app/views/foobars zu /app/views/Super-/foobars bewegen und bewegen /app/controllers/foobars_controller.rb zu /app/controllers/super/foobars_controller.rb Stellen Sie sicher, foobars_controller.rb im Modul Super-ist:

class Super::FoobarsController < ApplicationController 

Nun gehen Sie zu Ihrem .dev.server/foobars/ Sie sollten diese Fehlermeldung erhalten: Routing Fehler nicht initialisierte konstante FoobarsController

entfernen Sie nun Ressourcen: foobars von Anfang routes.rb sollte es arbeite jetzt!

Es dauerte eine Weile, um herauszufinden, warum ich diesen Fehler war immer, und ich wusste nicht, dass das Gerüst in routes.rb einen Eintrag zu erzeugen fügt

+0

https://github.com/swilson223/ParkingAppDevelopment Ist der Git-Hub zum Quellcode, wenn Sie ihn in vollem Kontext sehen möchten –