获取每个组的具有某一属性的用户?

3
我的模型有 User, Group, 和 Membership。用户可以通过会员资格加入很多组,反之亦然。我想创建一个工具,为网站管理员生成一个满足以下规范的大表格:
每行代表一个 user, 每列代表一个 group, 表格中的每个单元格都有一个布尔值,指示 user 是否属于 group
最佳的方法是什么?是否有可能编写一个单一的 SQL 查询来实现它(即User.find_by_sql)?如果不行,有哪些方法?
附言:实际上我需要更多的内容(我需要每个组两列,第一列表示成员身份,第二列计算 user 在该 group 中参加了多少次 meeting,但这涉及到 Meeting 模型,所以我会稍后再处理。

模型 User 有许多 Memberships,而模型 Membership 有许多 Groups。这是正确的吗?因为我正在编辑一个回答。 - JuanM.
在第一段中,您说“用户可以拥有多个组”,但后来又说“用户属于组”。请澄清一下。 - JuanM.
2个回答

1
假设您询问的是后端方法而不是数据可视化方面,JuanM.所说的大部分都是正确的。我建议避免编写他的 'get_groups' 方法,只需在用户和组之间设置“具有许多通过”关系即可。要这样做,请放置。
class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups, through: :memberships
end

在您的用户模型中,反之亦然,在您的组模型中(假设成员资格“属于”两者)。然后,您将在任何用户实例上拥有“.groups”方法,并在任何组实例上拥有“.users”方法。

@gdiazc 有没有机会能获得最佳答案呢?我真的很想能够评论哈哈 - SomeSchmo

0

这将会是我的方法:

编写一个函数,该函数返回用户是否属于通过参数传递的组。从用户获取所有组。在您的user.rb模型中,您可以添加此方法get_groups以检索用户的所有组,然后是一个方法is_in(group)。请参见下面的代码:
class User < ActiveRecord::Base
  #validations, some other stuff     
  has_many :memberships  

  #this method stores all the group-ids of the user in an array
  def get_groups

    myGroups = []

    memberships.each do |membership|
      membership.groups.each do |group|
        myGroups << group.id
      end
    end

    return myGroups

  end

  #this method receive a Group object and return true if the user belongs to that group
  def is_in(group)
    groups = get_groups
    return groups.include?(group.id)
  end

然后在您的视图或控制器中,您可以按如下方式工作:
 #the columns of the table
 groups = Group.all

 #iterating all users
 User.all.each do |user|

   #each user has to see if it belongs to each group in the groups table
   groups.each do |group|

     #the boolean value you display in a cell
     value = user.is_in(group)

   end

 end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接