it-swarm.com.de

Zirkulare Abhängigkeit beim automatischen Laden des konstanten Benutzers erkannt

Ich habe dieses Tutorial ( http://railscasts.com/episodes/236-omniauth-part-2 ) zum Erstellen des Facebook-Logins mit OmniAuth und Devise befolgt und erhalte diese Fehlermeldung: Zirkulare Abhängigkeit beim automatischen Laden des konstanten Benutzers in meinen routen.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

und hier ist meine Create-Methode von 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
13
Bejan George

Wo wurde dein registrations_controller.rb gespeichert? Die Lage ist wichtig. Ich habe festgestellt, dass ich einen Fehler beim Speichern von app/controllers/devise/. gemacht habe. Es musste lediglich in app/controllers/. gespeichert werden, z.

app/controllers/registrations_controller.rb


Außerdem sollte config/routes.rb route definiert werden als: 

devise_for :users, controllers: { registrations: 'registrations' }

11
Jonathan

Nun, ich bekam Erleichterung, nachdem ich die folgende Zeile in meine development.rb eingefügt hatte

config.middleware.delete Rack::Lock

Referenz: https://github.com/websocket-Rails/websocket-Rails/issues/101

Sie können dies endlich einmal ausprobieren.

2
Rubyrider

Ich hatte ein ähnliches Problem.

Und dann wurde mir klar, dass ich dieselbe Datei in verschiedenen Ordnern innerhalb des Controllers dupliziert habe und dies das Problem verursacht habe.

Ich hatte beide Dateien mit dem gleichen Inhalt:

  app/controllers/logs_controller.rb
  app/controllers/api/logs_controller.rb
2

Ich habe dasselbe Problem mit einigen Klassen in lib (verwendet config.autoload_paths += Dir["#{config.root}/lib/**/"])

für mich half Rails von 4.0.0.rc1 zu 4.0.0

2
ondrejbartas

auf Rails 4 brachen viele Edelsteine, alles wegen des Problems der Unloadable in Controllern. https://github.com/flyerhzm/switch_user/issues/34https://github.com/thoughtbot/high_voltage/issues/68https://github.com/thoughtbot/clearance/issues/276 und viele mehr 

sie sollten nach Fehlern suchen, durch welchen Edelstein das Problem verursacht wird. Wenn Sie Folgendes wissen: 1) Überprüfen Sie die offenen Ausgaben dieses Edelsteins. 2) Wenn dieses Problem besteht und behoben wurde , stellen Sie sicher, dass Sie diesen Fix haben oder aktualisieren Sie den Edelstein. 3) Wenn nicht, können Sie ein Problem erstellen und ihn bitten, es zu beheben. 4) Wenn Sie nicht auf den Fix warten möchten , können Sie den Edelstein bilden und einen Fix dafür geben https://github.com/cashins/email_preview/commit/b34a077a954b98bd086153fae8979ad142667555 . Alle Fixes sind gleich (Entfernen von unloadable von der angegebene Controller)

Ich hoffe es hilft.

wenn nichts hilft, Ihre Rails-Version herunterzustufen.

0
Sahil Dhankhar

Ich habe festgestellt, dass dies in development.rb funktioniert:

config.reload_classes_only_on_change = false

(Ich habe zuvor versucht, Gemfile.lock zu löschen und das Bundle-Update auszuführen sowie die Rails-Version zu ändern, wie hier und anderswo erwähnt. Sie funktionierten nicht für mich.)

0
mahemoff

Ich habe den gleichen Fehler mit einem Tippfehler erstellt, den ich hatte

module EmployeeReminderssHelper

als die Hilfsdatei aufgerufen wurde

employee_reminders_helper.rb

(Beachten Sie die zusätzlichen 's')

0
jared