我无法在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
我认为它应该适用于我目前的知识,但有些东西我想念。
我的问题是告诉我哪里出了问题。
Rounting Error
uninitialized constant AuthenticationsController
此消息显示在http://localhost:3000/auth/facebook/signout
答案 0 :(得分:49)
Rails要求文件名与类名匹配。因此,您应该将app/controllers/authentication_controller.rb
重命名为app/controllers/authentications_controller.rb
。
答案 1 :(得分:5)
虽然这个问题已得到解答,但我发现了另一个案例,我收到了这个错误,并希望在此处记录后代。
如果您的routes.rb文件中定义了两个类似的路由而没有相应的控制器,您将获得未初始化的常量错误。
重现的步骤:
rails generate scaffold foobar name:string
bundle exec rake db:migrate
将routes.rb的资源:foobars 添加到新范围(注意:在脚手架生成期间,foobars资源已经自动添加到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 移至 /app/controllers/super/foobars_controller.rb 确保foobars_controller.rb在Super模块中:
class Super::FoobarsController < ApplicationController
现在转到your.dev.server / foobars / 你应该得到这个错误: 路由错误未初始化的常量FoobarsController
现在,从routes.rb的开头删除资源:foobars 它现在应该工作了!
我花了一段时间弄清楚为什么我收到这个错误,我没有意识到生成脚手架会在routes.rb中添加一个条目
答案 2 :(得分:0)
虽然它没有回答您的具体问题,但我在路线中收到了以下错误.rb
resources :republishes do
post '/attempt_all', :to => 'republishes/#attempt_all' . . .
我改为
resources :republishes do
post '/attempt_all', :to => 'republishes#attempt_all' . . .
删除斜杠修复了我的问题。
答案 3 :(得分:0)
在我的情况下,由于我已经搭建了模块,因此它已经为控制器启动了路由,因此我定义了两次。因此,通过删除重复的资源路由之一解决了我的问题。
答案 4 :(得分:0)
确保已为有问题的控制器创建了模型。