Rails 3.2.12でこれを修正できませんでした。
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
それは私の現在の知識で機能するはずだと思いますが、私が見逃しているものがあります。
私の親切な質問は、何が悪いのか教えてください。
ルーティングエラー
uninitialized constant AuthenticationsController
これは、http://localhost:3000/auth/facebook/signout
に表示されるメッセージです
Railsでは、クラス名と一致するファイル名が必要です。したがって、app/controllers/authentication_controller.rb
の名前をapp/controllers/authentications_controller.rb
に変更する必要があります。
この質問には答えましたが、このエラーが発生している別のケースを見つけて、後世のためにここに記録したいと思いました。
Routes.rbファイルで、対応するコントローラーなしで2つの同様のルートが定義されている場合、初期化されていない定数エラーが発生します。
再現する手順:
Rails generate scaffold foobar name:string
bundle exec rake db:migrate
resources:foobarsをroutes.rbに新しいスコープに追加します(注:foobarsリソースは、scaffoldの生成中にすでにroutes.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に移動しますto / app/controllers/super/foobars_controller.rb foobars_controller.rbがスーパーモジュールにあることを確認します。
class Super::FoobarsController < ApplicationController
Your.dev.server/foobars /に移動します。次のエラーが表示されます:Routing Error uninitialized constant FoobarsController
次に、routes.rbの先頭からresources:foobarsを削除します。
このエラーが発生する理由を理解するにはしばらく時間がかかりましたが、scaffoldを生成するとroutes.rbにエントリが追加されることに気づきませんでした
あなたの特定の質問には答えませんが、routes.rbで次のような失敗を受け取りました。
resources :republishes do
post '/attempt_all', :to => 'republishes/#attempt_all' . . .
に変更しました
resources :republishes do
post '/attempt_all', :to => 'republishes#attempt_all' . . .
スラッシュを削除すると問題が解決しました。
私の場合、モジュールを足場にしたので、コントローラーのルートを既に開始しており、2回定義していました。そのため、重複するリソースルートの1つを削除することで問題が解決しました。