Я использую activeadmin для управления моделями моего приложения rails. У меня есть модель пользователя, которая использует может разделить ролевую модель и те роли моделируются с наследованием и используют STI в ActiveRecord.
Проблема в том, что независимо от того, на какой странице контроллера 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
Роль
ActiveAdmin.register RoleC do
menu :parent => 'Roles'
end
Что я делаю неправильно?