Подтвердить что ты не робот

Ошибка маршрутизации - неинициализированная постоянная

Я не мог исправить это в 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

4b9b3361

Ответ 1

Rails требует, чтобы имя файла соответствовало имени класса. Поэтому вы должны переименовать app/controllers/authentication_controller.rb в app/controllers/authentications_controller.rb.

Ответ 2

Хотя на этот вопрос был дан ответ, я нашел другой случай, когда я получал эту ошибку и хотел документировать ее здесь для потомков.

Если у вас есть два одинаковых маршрута, определенных в файле 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

Ответ 3

Хотя он не отвечает на ваш конкретный вопрос, я получил ошибку со следующими данными в моем маршруте. Rb

resources :republishes  do
    post '/attempt_all', :to => 'republishes/#attempt_all' . . .

который я изменил на

resources :republishes  do
    post '/attempt_all', :to => 'republishes#attempt_all' . . .

Удаление косой черты устранило мою проблему.

Ответ 4

В моем случае, так как я создал модуль, он уже инициировал маршруты для контроллера, и я определял его дважды. Таким образом, удалив один из дубликатов маршрутов ресурсов, я решил проблему.