配置ActiveAdmin多命名空间后,如何在自定义目录生成资源?
解决Active Admin多命名空间自定义目录生成资源问题
1. 确认初始化文件的命名空间配置
先检查config/initializers/active_admin.rb里的命名空间设置,确保companies命名空间指定了自定义资源目录:
ActiveAdmin.setup do |config| # 默认admin命名空间配置 config.namespace :admin do |admin| admin.root_to = 'dashboard#index' end # 自定义companies命名空间,指定资源存放目录 config.namespace :companies do |companies| companies.root_to = 'dashboard#index' # 核心配置:添加自定义资源目录到加载路径 companies.load_paths << Rails.root.join('app/admin/companies') end end
2. 生成资源时指定命名空间与目录
使用生成命令时,明确指定命名空间,同时控制文件生成路径:
- 生成admin命名空间资源(默认存放在
app/admin):
rails generate active_admin:resource User --namespace admin
- 生成companies命名空间资源,指定存放在
app/admin/companies:
rails generate active_admin:resource Product --namespace companies --path app/admin/companies
如果生成时没加--path参数,可手动将生成的文件移动到app/admin/companies目录。
3. 调整资源文件的命名空间声明
确保资源文件开头的命名空间与目录对应,比如app/admin/companies/product.rb:
ActiveAdmin.register Product, namespace: :companies do # 资源配置内容 permit_params :name, :price, :description end
4. 验证路由与重启服务
路由文件config/routes.rb保留ActiveAdmin.routes(self)即可,Active Admin会自动加载多命名空间路由。修改配置后必须重启Rails服务器,否则新配置不会生效。
排查要点
- 确认
app/admin/companies目录存在且权限正常 - 生成命令的参数无拼写错误
- 生成资源前已创建对应模型
内容的提问来源于stack exchange,提问作者amani
相关产品推荐
相关产品推荐

