まず第一に、私はグーグルで検索し、ここで検索を使用し、同じエラーに対する答えを見つけましたが、設定は異なります。たぶん私は別の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
主な問題は、次のように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、現在あります 定数の自動ロードのトピックに関する公式ガイド 。