it-roy-ru.com

Обнаружена циклическая зависимость при автозагрузке константы User

Я следовал этому руководству ( http://railscasts.com/episodes/236-omniauth-part-2 ) для создания входа в Facebook с OmniAuth и Devise, и я получаю эту ошибку: во время обнаружения циклической зависимости автозагрузка констант пользователя в моем rout.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
13
Bejan George

Где был сохранен ваш registrations_controller.rb? Местоположение важно. Я обнаружил, что сделал ошибку, сохранив ее в app/controllers/devise/.. Его просто нужно сохранить в app/controllers/., например:

app/controllers/registrations_controller.rb


Также маршрут config/routes.rb должен быть определен как: 

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

11
Jonathan

Ну, я почувствовал облегчение после добавления следующей строки в мою разработку.rb

config.middleware.delete Rack::Lock

Ссылка: https://github.com/websocket-Rails/websocket-Rails/issues/101

Вы можете попробовать это один раз, наконец.

2
Rubyrider

У меня была похожая проблема.

А потом понял, что один и тот же файл продублирован в разных папках внутри контроллера, и это стало причиной проблемы.

У меня были оба файла с одинаковым содержанием:

  app/controllers/logs_controller.rb
  app/controllers/api/logs_controller.rb
2
Daniel Pérez Rada

У меня такая же проблема с некоторыми классами в lib (используется config.autoload_paths += Dir["#{config.root}/lib/**/"])

мне помогло переключить Rails с 4.0.0.rc1 на 4.0.0

2
ondrejbartas

на Rails 4 начали ломаться многие драгоценные камни, все из-за проблемы выгрузки в контроллерах . https://github.com/flyerhzm/switch_user/issues/34https://github.com/thoughtbot/high_voltage/issues/68https://github.com/thoughtbot/clearance/issues/276 и многие другие 

вы должны посмотреть на ошибки, которые тот камень создает проблему . Как только вы знаете, что: 1) Проверьте открытые проблемы этого камня 2) Если эта проблема существует и исправлена, убедитесь, что у вас есть, что исправить или обновить драгоценный камень . 3) Если вы не можете создать проблему и попросить их исправить это 4) Если вы не хотите ждать их исправления, вы можете создать драгоценный камень и нажать исправление для этого https://github.com/cashins/email_preview/commit/b34a077a954b98bd086153fae8979ad142667555 все исправления одинаковы (удаление выгружаемого из указанного контроллера)

Надеюсь, поможет.

если ничто не помогает понизить вашу версию Rails.

0
Sahil Dhankhar

Я нашел это работает в разработке.

config.reload_classes_only_on_change = false

(Ранее я пытался удалить Gemfile.lock и запустить обновление пакета, а также изменить версию Rails, как упоминалось здесь и в других местах. Они не работали для меня.)

0
mahemoff

Я сделал ту же ошибку с опечаткой, у меня было

module EmployeeReminderssHelper

когда был вызван вспомогательный файл

employee_reminders_helper.rb

(Обратите внимание на дополнительные 's')

0
jared