自动加载常量用户时检测到循环依赖 [英] Circular dependency detected while autoloading constant User
问题描述
我已经按照本教程(http://railscasts.com/episodes/236-omniauth-part-2) 用于使用 OmniAuth 和 Devise 创建 facebook 登录,我收到此错误:在我的 routes.rb 中自动加载常量用户时检测到循环依赖
I've followed this tutorial (http://railscasts.com/episodes/236-omniauth-part-2) for creating facebook login with OmniAuth and Devise and I get this error: Circular dependency detected while autoloading constant User in my routes.rb
devise_for :users , :controllers => {:registrations => 'registrations'}
registrations_controller.rb
registrations_controller.rb
Class RegistrationsController < Devise::RegistrationsController
def create
super
session[:omniauth] = nil unless @user.new_record?
end
private
def build_resource(*args)
super
if session["devise.omniauth"]
@user.apply_omniauth(session["devise.omniauth"])
session["devise.omniauth"] = nil
end
end
end
这是我从 AuthenticationsController 创建的方法
and here's my create method from AuthenticationsController
def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, authentication.user)
elsif current_user
current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
else
user = User.new
user.apply_omniauth(omniauth)
if user.save
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, user)
else
session[:omniauth] = omniauth.except('extra')
redirect_to new_user_registration_url
end
end
end
推荐答案
你的 registrations_controller.rb
保存到哪里了?位置很重要.我发现我在将它保存到 app/controllers/devise/.
时犯了一个错误.它只需要保存在 app/controllers/.
例如:
Where was your registrations_controller.rb
saved to? The location is important. I found that I was making a mistake saving it to app/controllers/devise/.
. It simply needed to be saved in app/controllers/.
e.g.:
app/controllers/registrations_controller.rb
另外,config/routes.rb
路由应该定义为:
Also, config/routes.rb
route should be defined as:
devise_for :users, controller: { registrations: 'registrations' }
这篇关于自动加载常量用户时检测到循环依赖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!