以管理方式将用户分组

Administratively putting users into groups

有很多用户和一个管理员。用户可以创建群组并 send/receive 请求加入这些群组。该系统工作正常。我现在正在构建管理员创建的单独 "super groups"。这些 "super groups" 不依赖于请求,它们依赖于预约。管理员 select 是一个用户,select 是一个组,并将所选用户添加到所选组中。我该如何做到这一点?

例如,作为管理员,我想转到用户的个人资料页面,在个人资料页面上有一个下拉菜单(仅管理员可访问)并将用户添加到我选择的组中。我将如何做到这一点?通过一种形式?布尔字段?我可以在我的加入模型创建操作中添加一个追加方法 (<<) 并为一个组添加一个 select 标签,然后添加一个创建提交按钮吗?我只要指出大方向,我觉得我能搞定。

注意: 我正在使用 has_many :through 关联来捕获关系。一个管理员有很多 "super groups" 个 created/deleted 没问题。 "super group" 有很多成员(用户)。我只需要知道如何在管理上将用户放入组中。

更新 - 将用户添加到 has_many 的最佳做法是什么:通过下拉列表关联?

您说的是要从用户的个人资料页面将用户添加到超级组。这意味着您要将 super_group_id 传递给 Rails 控制器,找到该超级组,然后将用户添加到该组。

这是一个选项:

 @user = User.find(params[:id]) # or user_id, depending on the controller
 @super_group = SuperGroup.find(params[:super_group_id])
 @super_group.users << @user

原答案:

您目前如何创建和删除超级群组?我假设你有 SuperGroupsController。实现此目的的一种方法是让子控制器 SuperGroups::UsersController 具有相同的 RESTful 操作(createupdate 等)。这些 restful 操作处理 assigning/removing 用户到组。这允许您将需要执行的检查分开,以确保只有管理员在执行这些操作。

class SuperGroups::UsersController < ApplicationController
  before_action :verify_admin # create this method to do the checking

  def create
    # create a user super group association here
  end

  def delete
    # remove a user from the super group here
  end
end

根据 DHH,这显然是最佳做法。我在阅读 this article 后第一次使用了这个方法,我发现这个模式非常简洁和有用。