【问题标题】:Administratively putting users into groups以管理方式将用户分组
【发布时间】:2016-04-11 15:37:15
【问题描述】:

有很多用户和一个管理员。用户可以创建组并发送/接收加入这些组的请求。该系统运行良好。我现在正在构建管理员创建的单独的“超级组”。这些“超级群体”不是靠请求,而是靠预约。管理员选择一个用户,选择一个组,然后将所选用户添加到所选组中。我该如何做到这一点?

  • 如何设置它以便管理员可以简单地选择一个用户(在他们的个人资料页面上)、选择一个组(最好从下拉列表中)然后进行关联?

例如,作为管理员,我想转到用户的个人资料页面,在个人资料页面上有一个下拉菜单(只有管理员可访问)并将用户添加到我选择的组中。我将如何做到这一点?通过一种形式?布尔字段?我可以在我的加入模型创建操作中添加一个附加方法 (

注意:我正在使用 has_many :through 关联来捕获关系。管理员有许多“超级组”,可以很好地创建/删除。 “超级组”有很多成员(用户)。我只需要知道如何以管理方式将用户放入组中。

【问题讨论】:

  • 这些分为多少个模型?你有SuperGroup 模型和Group 模型,还是SuperGroup 只是Group 的一种类型?如果您可以将这些模型与其关联包括在内,那将有助于为您提出解决方案。
  • Groups 和 Super Groups 是两个独立的模型。
  • 我真的只需要知道将用户添加到 has_many 的最佳实践:通过下拉关联。
  • 请看我更新的答案。简短的回答是:使用下拉菜单选择super_group_id。将其传递给 Rails 控制器。加载正确的记录后,使用 append 方法 (<<) 将用户分配到组。

标签: ruby-on-rails forms ruby-on-rails-4 activerecord grouping


【解决方案1】:

更新 - 将用户添加到 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。实现此目的的一种方法是使用具有相同 RESTful 操作(createupdate 等)的子控制器 SuperGroups::UsersController。那些安静的动作处理将用户分配/删除到组。这允许您将需要执行的检查分开,以确保只有管理员在执行这些操作。

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 之后,我第一次使用了这种方法,我发现这种模式非常干净和有用。

【讨论】:

  • 我有一个超级组关联控制器,用于创建和删除超级组的成员资格。我基本上有你描述的,目前。我迷失的是如何选择要添加到关联中的用户。例如,作为管理员,我想进入用户的个人资料页面,在个人资料页面上有一个下拉菜单(只有管理员可访问)并将用户添加到我选择的组中。我将如何做到这一点?通过一种形式?布尔字段?
  • 一个用户可以只属于一个SuperGroup,还是可以属于多个不同的SuperGroups?
  • 只有一个。我以为我稍后会使用验证。它被设置为 has_many,以便它们可以属于许多,但我这样做只是为了简单。
  • 这就是我要找的!谢谢!
猜你喜欢
  • 2012-11-23
  • 1970-01-01
  • 2021-07-22
  • 2017-05-14
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多