2013-04-06 34 views
26

Tôi không thể sửa lỗi này trong Rails 3.2.12, có thể tôi đang thiếu thứ gì đó.Lỗi định tuyến - hằng số không được khởi tạo

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 

Tôi nghĩ rằng nó sẽ làm việc với kiến ​​thức hiện tại của tôi, nhưng có một cái gì đó mà tôi bỏ lỡ.

Câu hỏi của tôi sẽ là để cho biết điều gì là sai, xin vui lòng.

Rounting Lỗi

uninitialized constant AuthenticationsController

Đây là một thông điệp rằng hiện tại http://localhost:3000/auth/facebook/signout

Trả lời

43

Rails đòi hỏi tên tập tin để phù hợp với tên lớp. Do đó, bạn nên đổi tên app/controllers/authentication_controller.rb thành app/controllers/authentications_controller.rb.

+2

oh. cảm ơn bạn @alfonso. Tôi tạo ra bộ điều khiển theo cách này 'rails g controller authentication' để tập tin được đặt tên là' authentication_controller.rb' bởi chính nó, có lẽ tôi đã thay đổi tên lớp. Cảm ơn bạn rất nhiều vì đã trả lời một câu hỏi được biết đến nhiều nhất. – Davit

+1

@Davit Mẹo: Bạn nên luôn sử dụng số nhiều trong khi tạo bộ điều khiển. – Bonifacio2

4

Mặc dù câu hỏi này đã được trả lời, tôi đã tìm thấy một trường hợp khác mà tôi gặp phải lỗi này và muốn ghi lại nó ở đây vì hậu thế.

Nếu bạn có hai tuyến đường tương tự được xác định trong tệp tuyến đường của bạn.rb mà không có bộ điều khiển tương ứng, bạn sẽ nhận được lỗi liên tục chưa được khởi tạo.

bước để tái sản xuất:

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

thêm nguồn: foobars để routes.rb đến một phạm vi mới (lưu ý: tài nguyên foobars đã được tự động thêm vào phía trên cùng của routes.rb của bạn trong thế hệ giàn giáo) như thế này:

resources :foobars 

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

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

    end 
    end 

Bây giờ, di chuyển /app/views/foobars để /app/views/siêu/foobars , và di chuyển /app/controllers/foobars_controller.rb để /app/controllers/super/foobars_controller.rb Hãy chắc chắn rằng foobars_controller.rb là trong các mô-đun siêu:

class Super::FoobarsController < ApplicationController 

Bây giờ đi đến của bạn .dev.server/foobars/ Bạn sẽ nhận được lỗi này: Routing lỗi uninitialized FoobarsController liên tục

Bây giờ, loại bỏ nguồn: foobars từ đầu routes.rb Nó nên làm việc ngay bây giờ!

Tôi mất một lúc để tìm ra lý do tại sao tôi gặp phải lỗi này và tôi không nhận ra rằng việc tạo giàn giáo sẽ thêm mục nhập trong routes.rb

+0

https://github.com/swilson223/ParkingAppDevelopment Là trung tâm git với mã nguồn nếu bạn muốn xem nó trong bối cảnh đầy đủ –

Các vấn đề liên quan