Active Admin嵌套关联

时间:2012-11-01 14:05:23

标签: ruby-on-rails activeadmin

所以我的程序中有以下模型:

class User < ActiveRecord::Base
  has_many :group_members
  has_many :groups, through: :group_members 

class GroupMember < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

class Group < ActiveRecord::Base
  has_many :group_members
  has_many :users, through: :group_members
end

我正在使用ActiveAdmin来管理这些资源。 admin文件夹中的groups.rb文件如下所示:

ActiveAdmin.register Group do
.
.
  belongs_to :user, :optional => true
.
.
end

问题是,Group本身就是一个资源 - 管理员可以通过转到/admin/groups路由来管理组 - 但它也是用户的资源,我能够通过以下方式查看用户组访问/admin/users/:user_id/groups路由。但是,当我尝试通过访问/admin/users/:user_id/groups/new页面并填写表单来为此用户创建新组时,出现错误:

ActiveRecord::RecordNotFound in Admin::GroupsController#show
Couldn't find Group with id=13 [WHERE `group_members`.`user_id` = 2]

用户ID对应于我当前登录的用户且它是正确的,而group id = 13对应于新创建的组的ID(它正确地保存在数据库中),但{{1}中的关联没有创建表。实际上,这甚至不是我在这里想要实现的目标:理想的情况是检索组列表并在新页面中显示它,以便不在此页面中创建新的group_members - 仅groups

在这种情况下如何处理?提前谢谢!

1 个答案:

答案 0 :(得分:4)

您是否考虑过删除

belongs_to
组注册块中的

声明?这个aa dsl语句为您提供的接口嵌套,看起来不错,并为您提供了一个单击路径,但最后它只是数据(模型)上的装饰。在用户模型中使用过滤器和范围也可以。如果你真的需要aa的belongs_to,你将不得不创建自定义编辑屏幕和自定义重定向。祝你好运。