Ответ 1
Rails требует, чтобы имя файла соответствовало имени класса. Поэтому вы должны переименовать app/controllers/authentication_controller.rb
в app/controllers/authentications_controller.rb
.
Я не мог исправить это в Rails 3.2.12, может быть, мне что-то не хватает.
конфигурации /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'
приложение/контроллеры/authentication_controller.rb
class AuthenticationsController < ApplicationController
...
end
приложение/модели/authentication.rb
class Authentication < ActiveRecord::Base
...
end
Я думаю, что он должен работать с моими текущими знаниями, но есть кое-что, что я пропускаю.
Мой добрый вопрос - сказать, что не так, пожалуйста.
Ошибка подключения
uninitialized constant AuthenticationsController
Это сообщение, которое отображается в http://localhost:3000/auth/facebook/signout
Rails требует, чтобы имя файла соответствовало имени класса. Поэтому вы должны переименовать app/controllers/authentication_controller.rb
в app/controllers/authentications_controller.rb
.
Хотя на этот вопрос был дан ответ, я нашел другой случай, когда я получал эту ошибку и хотел документировать ее здесь для потомков.
Если у вас есть два одинаковых маршрута, определенных в файле routes.rb без соответствующих контроллеров, вы получите неинициализированную постоянную ошибку.
Шаги для воспроизведения:
rails generate scaffold foobar name:string
bundle exec rake db:migrate
добавить ресурсы: foobars в route.rb в новую область (примечание: ресурс foobars уже был автоматически добавлен в начало ваших маршрутов .rb во время создания эшафотов) следующим образом:
resources :foobars
########################################
# SUPER
########################################
constraints host: ENV['SUPER_HOST'] do
scope module: :super do
resources :foobars
get '/' => 'super#index'
end
end
Теперь переместите /app/views/foobars в /app/views/super/foobars и переместите /app/controllers/foobars_controller.rb в /app/controllers/super/foobars_controller.rb Убедитесь, что foobars_controller.rb находится в модуле Super:
class Super::FoobarsController < ApplicationController
Теперь перейдите на страницу your.dev.server/foobars/ Вы должны получить эту ошибку: Ошибка маршрутизации неинициализированная константа FoobarsController
Теперь удалите ресурсы: foobars с начала route.rb Теперь он должен работать!
Мне потребовалось некоторое время, чтобы понять, почему я получаю эту ошибку, и я не понимал, что создание эшафота добавляет запись в routes.rb
Хотя он не отвечает на ваш конкретный вопрос, я получил ошибку со следующими данными в моем маршруте. Rb
resources :republishes do
post '/attempt_all', :to => 'republishes/#attempt_all' . . .
который я изменил на
resources :republishes do
post '/attempt_all', :to => 'republishes#attempt_all' . . .
Удаление косой черты устранило мою проблему.
В моем случае, так как я создал модуль, он уже инициировал маршруты для контроллера, и я определял его дважды. Таким образом, удалив один из дубликатов маршрутов ресурсов, я решил проблему.