我的模型:User
,Group
和Membership
。用户可以通过成员身份拥有多个组,反之亦然。我想为网站管理员创建一个工具,生成一个包含以下规范的大表:
每一行代表user
,
每列代表一个group
,
在表格的每个单元格中都有一个布尔值,表示user
是否属于group
。
最好的方法是什么?是否可以编写一个实现它的SQL查询(即User.find_by_sql
)?如果没有,怎么回事?
P.S。我实际上需要的不仅仅是这个(我需要每组两列,第一个指示成员资格,第二个计算meeting
user
在group
中所占用的数量Meeting
,但这涉及<?php
header('Content-type: text/plain; charset=utf-8');
?>
模型,所以我稍后会留下它。
答案 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)
这将是我的方法:
编写一个函数,如果用户属于参数传递的组,则返回该函数。从用户获取所有组。在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