web-dev-qa-db-ja.com

定数のロード時に定数の自動ロード中に循環依存関係が検出されました

まず第一に、私はグーグルで検索し、ここで検索を使用し、同じエラーに対する答えを見つけましたが、設定は異なります。たぶん私は別のsthを破った;)

エラー:

RuntimeError at /admin/users
Circular dependency detected while autoloading constant Admin::UsersController

構造は次のとおりです。

App => controllers => admin => users_controller.rb

ルート:

namespace :admin do
  resources :stuff
  resources :users
end

ユーザーコントローラー:

class UsersController < Admin::BaseController
  def new
    #code
  end

  def create
    #code
  end

  def index
    #code
  end

  private

  def user_params
   #code
  end
end

管理ベースコントローラー

class Admin::BaseController < ApplicationController
  layout 'admin'
  before_filter :require_login
end

使用:Rails 4.1.4、Ruby 2.1.2ここで何を間違えましたか?

ご協力いただきありがとうございます!

編集:

development.rb

Rails.application.configure do
 config.cache_classes = false
 config.eager_load = false
 config.consider_all_requests_local       = true
 config.action_controller.perform_caching = false
 config.action_mailer.raise_delivery_errors = false
 config.active_support.deprecation = :log
 config.active_record.migration_error = :page_load
 config.assets.debug = true
 config.assets.raise_runtime_errors = true
end
40
tomr

主な問題は、次のようにAdmin名前空間の下でUsersControllerの名前空間を設定していないことだけのようです。

class UsersController < Admin::BaseController

簡単な修正:

class Admin::UsersController < Admin::BaseController

ただし、今後の頭痛の種を減らすために、名前空間を個別の部分に分割することもお勧めします。したがって、上記の代わりに、これを実行します。

# app/controllers/admin/users_controller.rb
module Admin
  class UsersController < Admin::BaseController
    # ...
  end
end

そして、次のような他のすべての名前空間コントローラーでも同じことを行います。

# app/controllers/admin/base_controller.rb
module Admin
  class BaseController < ApplicationController
    # ...
  end
end

このように、Railsはロードと自動ロードなどであるため、その下のクラスをロードする前に常に管理モジュールを定義する必要があります。少し複雑ですが、ご覧になりたい場合は この投稿 をご覧ください。

更新

On Rails Edge、現在あります 定数の自動ロードのトピックに関する公式ガイド

43
pdobb