我正在使用 activeadmin 来管理我的 rails 应用程序的模型。我有一个使用可以分离角色模型的用户模型,这些角色通过继承建模并在 ActiveRecord 上使用 STI。
问题是,无论我在哪个角色的 activeadmin 控制器页面上,填充的索引都会显示角色的所有实例和子类
例子:
我创建 RoleA 和 RoleB 实例。然后我转到 RoleA 索引页面,RoleB 显示在列表中。反之亦然。
细节
我有几个不同的角色,它们遵循角色对象模式,其中我有一个抽象角色及其子类。我使用这种模式是因为一个用户可以拥有多个角色。另一方面,角色共享基本属性但其中一些不同,这就是为什么使用继承来建模这些角色
ROLE
|
---> RoleA
|
---> RoleB
|
---> RoleC
我有这个 STI 迁移
class CreateRoles < ActiveRecord::Migration
def change
create_table :roles do |t|
t.string :name #this is the name I want the role to show up on screen
t.references :role_a_attr
t.references :role_b_attr
t.string :type
t.timestamps
end
end
end
在我的 activeadmin 控制器中,我注册了:Role、RoleA、RoleB 和 RoleC。 角色
ActiveAdmin.register Role do
config.clear_action_items! # We don't want to create this kind of objects directly
index do
column :id
column :name
default_actions
end
end
角色A
ActiveAdmin.register RoleA do
#we only want one super admin role
config.clear_action_items! if RoleA.first
menu :parent => 'Roles'
show do
attributes_table do
row :id
row :name
row :created_at
row :updated_at
end
end
end
角色B
ActiveAdmin.register RoleB do
menu :parent => 'Roles'
end
角色C
ActiveAdmin.register RoleC do
menu :parent => 'Roles'
end
我究竟做错了什么?