ruby-on-rails – 自动加载常数时检测到循环依赖用户

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 自动加载常数时检测到循环依赖用户前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经遵循这个教程( http://railscasts.com/episodes/236-omniauth-part-2)用OmniAuth和Devise创建facebook登录,并且我得到这个错误:在我的routes.rb中自动加载常量的用户检测到循环依赖
  1. devise_for :users,:controllers => {:registrations => 'registrations'}

registrations_controller.rb

  1. Class RegistrationsController < Devise::RegistrationsController
  2.  
  3. def create
  4. super
  5. session[:omniauth] = nil unless @user.new_record?
  6. end
  7.  
  8. private
  9.  
  10. def build_resource(*args)
  11. super
  12. if session["devise.omniauth"]
  13. @user.apply_omniauth(session["devise.omniauth"])
  14. session["devise.omniauth"] = nil
  15. end
  16. end
  17. end

这是我的来自AuthenticationsController的创建方法

  1. def create
  2. omniauth = request.env["omniauth.auth"]
  3. authentication = Authentication.find_by_provider_and_uid(omniauth['provider'],omniauth['uid'])
  4. if authentication
  5. flash[:notice] = "Signed in successfully."
  6. sign_in_and_redirect(:user,authentication.user)
  7. elsif current_user
  8. current_user.authentications.create!(:provider => omniauth['provider'],:uid => omniauth['uid'])
  9. flash[:notice] = "Authentication successful."
  10. redirect_to authentications_url
  11. else
  12. user = User.new
  13. user.apply_omniauth(omniauth)
  14. if user.save
  15. flash[:notice] = "Signed in successfully."
  16. sign_in_and_redirect(:user,user)
  17. else
  18. session[:omniauth] = omniauth.except('extra')
  19. redirect_to new_user_registration_url
  20. end
  21. end
  22. end

解决方法

你的registrations_controller.rb保存在哪里?位置很重要.我发现我正在把它保存在app / controllers / devise / ..中.它只需要保存在app / controllers /中.例如.:

应用程序/控制器/ registrations_controller.rb

另外,config / routes.rb路由应定义为:

devise_for:用户,控制器:{注册:’注册’}

猜你在找的Ruby相关文章