拥有每个组的属性的用户?

时间:2015-11-30 20:25:18

标签: sql ruby-on-rails

我的模型:UserGroupMembership。用户可以通过成员身份拥有多个组,反之亦然。我想为网站管理员创建一个工具,生成一个包含以下规范的大表:

每一行代表user, 每列代表一个group, 在表格的每个单元格中都有一个布尔值,表示user是否属于group

最好的方法是什么?是否可以编写一个实现它的SQL查询(即User.find_by_sql)?如果没有,怎么回事?

P.S。我实际上需要的不仅仅是这个(我需要每组两列,第一个指示成员资格,第二个计算meeting usergroup中所占用的数量Meeting ,但这涉及<?php header('Content-type: text/plain; charset=utf-8'); ?> 模型,所以我稍后会留下它。

2 个答案:

答案 0 :(得分:1)

假设您正在询问后端方法而不是数据可视化方面的大部分JuanM。说的是对的。我建议的一件事是避免写他的&#39; get_groups&#39;方法,只需设置一个&#39;有很多通过&#39;组内用户之间的关系。要这样做

class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups, through: :memberships
end

在您的用户模型中,反之亦然在您的群组模型中(假设会员资格&#39; belongs_to&#39;两者)。然后你会有一个&#39; .groups&#39;任何用户实例上的方法和&#39; .users&#39;任何Group实例上的方法

答案 1 :(得分:0)

这将是我的方法:

  1. 编写一个函数,如果用户属于参数传递的组,则返回该函数。从用户获取所有组。在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
    
  2. 然后在您的视图或控制器中,您可以按照以下方式工作:

     #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