0

我对active_admin还很陌生,我想知道是否有办法实现以下目标

我有两个模型

User
  belongs_to :group

Group
 has_many :users

我已经成功地在 activeadmin 中为组和用户创建了页面,现在我想要的是显示属于某个组的用户。我在组索引页面上有按钮 manage_members 应该只显示该组的成员。我可以从组中删除成员或添加更多成员。

这是我迄今为止能够做到的

member_action :manage_members do
    @group = Group.find(params[:id])
    @page_title = "Manage Groups > @#{@group.name}, Edit Members"
end

和视图 app/vies/admin/groups/manage_users.html.arb

table_for assigns[:group].users do
  column "Name" do |u|
    u.user_id
  end
  column "email" do |u|
    u.user.email
  end
  column "Created Date" do |u|
    u.user.created_at
  end

  column "OfficePhone" do |u|
    u.user.office_no
  end
end

这显示了组的成员,但我必须在此页面上完成所有工作才能添加编辑删除成员,我不能在这里有 active_admin 过滤器和其他很酷的东西,这就像一个自定义页面,

有没有办法拥有一个索引页面(具有过滤器批处理操作等所有优点)(就像用户一样),但只显示一个组的用户。类似于范围索引页面,它显示在组中的用户上,我对该页面具有与任何活动管理索引页面相同的控制权?更像下图

这就是我所说的索引页

而不是必须做我自己目前看起来像的所有工作

我不想要这个

对 active_admin 来说非常新,所以如果我遗漏了一些非常直截了当的东西,我们深表歉意。

谢谢

4

1 回答 1

1

也许过滤器会做。看起来像(把它放在你放置 member_action 的同一个文件中)

filter :group, :as => :select, :collection => proc { Group.for_select }

proc 用于确保对组的更改(添加/删除/..)立即反映到过滤器中的选择列表。这与生产中的类缓存有关。不要忘记将此范围放在您的 Group 模型中。

scope :for_select, :select => [:id, :name], :order => ['name asc']

另一种方法是使用范围。如果您的 Group 模型中有一个字段,例如可以用作方法标头的 slug/label,那么您可以在您的 activeadmin 用户注册块中执行以下操作:

Group.all.each do |group|
  # note the sanitization of the Group name in the gsub
  scope "#{group.name.gsub(/-/,'_')}".to_sym
end

这在您的用户模型中:

Group.all.each do |group|
  # note the sanitization of the Group name in the gsub
  scope "#{group.name.gsub(/-/,'_')}".to_sym, joins(:group).where("group.name = ?",role.name)  
  # using joins(:group) or joins(:groups) makes a difference,
  # so not sure as I have not tested, but maybe the where should be
  # ....where("groups.name = ....
end

它应该在索引视图上方为您提供不错的按钮,如下所示:http: //demo.activeadmin.info/admin/orders

如果你想要这个 has_and_belongs_to_many 关系,我建议你看看这个 Rails3 Active Admin - How to filter only records that meet all checked items in collection

祝你好运!

于 2013-02-25T15:45:05.400 回答