RailsエンジンのActiveAdminでエラーが発生します:初期化されていない定数MyEngine::Admin
概要
メインアプリケーションにマウントした Rails エンジンに activeadmin をインストールしました。ホーム ページにアクセスしようとすると、次のエラーが表示されます: uninitialized constant BackOffice::Admin
lib/back_office/engine.rb のコード
require 'devise'
require 'activeadmin'
module BackOffice
class Engine < ::Rails::Engine
isolate_namespace BackOffice
initializer :back_office do
ActiveAdmin.application.load_paths += Dir[File.dirname(__FILE__) + '/back_office/admin']
end
end
end
ルート.rb
BackOffice::Engine.routes.draw do
devise_for :admin_users, class_name: "BackOffice::AdminUser"
ActiveAdmin.routes(self)
end
私のメインアプリのroutes.rbファイルにはこれがあります:
mount BackOffice::Engine, at: "/back_office"
誰か手伝ってくれませんか?
解決策
初期化されていない定数エラーは、BackOffice::Admin が見つからないことを意味します。まず、その定数はエンジンで定義されていますか?それとも、BackOffice モジュールの親内にネストせずに、back_office 名前空間で Admin を定義していますか? Rails コンソールを起動して BackOffice::Admin と入力すると、クラス定数を解決できますか?
このようなことは機能しますか?
initializer :back_office do
ActiveAdmin.application.load_paths << root.join('back_office/admin')
end
イニシャライザにバインディングを設定して、root.join(‘back_office/admin’) が期待したパスを構築していることを検証してください。 ActiveAdmin の初期化フローで適切なタイミングでアクションが実行されるようにするために、 before または after 引数を追加する必要がある場合もあります。
Bundle exec Rails ルートを実行する場合、マウントしている管理ルートの名前空間は正しく設定されていますか? 「ホームページにアクセスしようとする」とき、どのルートにアクセスしますか?開発サーバーのログでアプリから得られるフィードバックは何ですか?