You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails引擎集成ActiveAdmin报错:uninitialized constant BackOffice::Admin

解决Rails引擎中ActiveAdmin报错uninitialized constant BackOffice::Admin

以下是针对性的修复步骤:

1. 修正ActiveAdmin资源加载路径

你的引擎初始化器里的路径拼接错误,导致ActiveAdmin找不到正确的资源目录。修改lib/back_office/engine.rb中的initializer:

require 'devise'
require 'activeadmin'

module BackOffice
  class Engine < ::Rails::Engine
    isolate_namespace BackOffice

    initializer :back_office do
      # 修正路径指向引擎的app/admin目录
      ActiveAdmin.application.load_paths += Dir[File.expand_path('../../app/admin', __FILE__)]
    end
  end
end

2. 确保AdminUser模型在正确命名空间下

在引擎的app/models/back_office/admin_user.rb中定义模型(如果不存在则创建该文件):

module BackOffice
  class AdminUser < ApplicationRecord
    devise :database_authenticatable, :registerable,
           :recoverable, :rememberable, :validatable
  end
end

3. 配置ActiveAdmin命名空间并注册资源

在引擎的app/admin目录下创建资源文件(比如app/admin/back_office_admin_user.rb),指定ActiveAdmin使用BackOffice命名空间:

ActiveAdmin.register BackOffice::AdminUser, namespace: :back_office do
  permit_params :email, :password, :password_confirmation

  index do
    selectable_column
    id_column
    column :email
    column :created_at
    actions
  end

  form do |f|
    f.inputs "Admin User Details" do
      f.input :email
      f.input :password
      f.input :password_confirmation
    end
    f.actions
  end
end

同时在引擎初始化器中追加ActiveAdmin命名空间配置,确保权限和路由对应:

# 在lib/back_office/engine.rb的initializer块内追加
config.to_prepare do
  ActiveAdmin.setup do |config|
    config.namespace :back_office do |admin|
      admin.site_title = "Back Office Admin"
      admin.authentication_method = :authenticate_back_office_admin_user!
      admin.current_user_method = :current_back_office_admin_user
      admin.logout_link_path = :destroy_back_office_admin_user_session_path
    end
  end
end

4. 调整引擎路由配置

修改引擎的config/routes.rb,确保Devise和ActiveAdmin路由正确关联到命名空间:

BackOffice::Engine.routes.draw do
  devise_for :admin_users, class_name: "BackOffice::AdminUser", module: :devise
  ActiveAdmin.routes(self)
end

验证修复

  1. 重启Rails服务器
  2. 访问/back_office/admin(对应主应用挂载的at: "/back_office"路径)
  3. 确认是否能正常加载ActiveAdmin后台

内容的提问来源于stack exchange,提问作者Mina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:07:32