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

我已经遵循这个教程( http://railscasts.com/episodes/236-omniauth-part-2)用OmniAuth和Devise创建facebook登录,并且我得到这个错误:在我的routes.rb中自动加载常量的用户检测到循环依赖
devise_for :users,:controllers => {:registrations => 'registrations'}

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的创建方法

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 /中.例如.:

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

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

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...