Techioz Blog

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 ルートを実行する場合、マウントしている管理ルートの名前空間は正しく設定されていますか? 「ホームページにアクセスしようとする」とき、どのルートにアクセスしますか?開発サーバーのログでアプリから得られるフィードバックは何ですか?