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
验证修复
- 重启Rails服务器
- 访问
/back_office/admin(对应主应用挂载的at: "/back_office"路径) - 确认是否能正常加载ActiveAdmin后台
内容的提问来源于stack exchange,提问作者Mina
相关产品推荐
相关产品推荐

