2013-04-06 23 views
26

Nie mogłem tego naprawić w Rails 3.2.12, może brakuje mi czegoś.Błąd routingu - niezainicjowana stała

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 

Myślę, że powinno to działać z moją obecną wiedzą, ale jest coś, za czym tęsknię.

Moim miłym pytaniem byłoby powiedzieć, co jest nie tak, proszę.

Rounting Błąd

uninitialized constant AuthenticationsController

Jest to komunikat, który pojawia się na http://localhost:3000/auth/facebook/signout

Odpowiedz

43

Rails wymaga nazwy pliku, aby dopasować nazwę klasy. Dlatego należy zmienić nazwę na app/controllers/authentication_controller.rb na app/controllers/authentications_controller.rb.

+2

oh. dziękuję @alfonso. Stworzyłem w ten sposób kontroler '' rails g controller authentication', więc plik sam został nazwany 'authentication_controller.rb', może zmieniłem nazwę klasy. Dziękuję bardzo za odpowiedź na tak znane pytanie. – Davit

+1

@ Końcówka grawitacyjna: Powinieneś zawsze używać liczby mnogiej podczas generowania kontrolerów. – Bonifacio2

4

Mimo odpowiedzi na to pytanie, znalazłem inny przypadek, w którym otrzymałem ten błąd i chciałem go tutaj udokumentować dla potomności.

Jeśli masz dwie podobne trasy zdefiniowane w pliku routes.rb bez odpowiednich kontrolek, otrzymasz niezainicjowany stały błąd.

Kroki do odtworzenia:

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

dodać zasobów: foobars do routes.rb do nowego zakresu (uwaga: zasób foobars już automatycznie dodawane do góry routes.rb podczas generowania rusztowania) tak:

resources :foobars 

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

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

    end 
    end 

Teraz przesuń /app/views/foobars do /app/views/Super/foobars i przesuń /app/controllers/foobars_controller.rb do /app/controllers/super/foobars_controller.rb Upewnij foobars_controller.rb jest w module Super:

class Super::FoobarsController < ApplicationController 

Teraz przejdź do .dev.server/foobars/ Powinieneś dostać ten błąd: Routing error niezainicjowanej stałą FoobarsController

teraz usunąć zasoby: foobars od początku routes.rb powinno Pracuj teraz!

Zajęło mi trochę czasu, aby dowiedzieć się, dlaczego ja otrzymuję ten błąd, a ja nie wiedziałem, że generowanie rusztowania dodaje wpis w routes.rb

+0

https://github.com/swilson223/ParkingAppDevelopment Jest to koncentrator git dla kodu źródłowego, jeśli chcesz go zobaczyć w pełnym kontekście –

Powiązane problemy