2017-04-19 45 views
0
Attendance.joins(:user).group(:email, :name).count 

上面的查询为我提供了下面的结果。 “用户1”有2次出席,“用户2”有6次出席,另外我可以访问用户名和电子邮件。ActiveRecord查询。由多个表格中的多列组成

{["[email protected]", "User 1"]=>2, ["[email protected]", "User 2"]=>6]} 

这是伟大的,除非我真的很喜欢User.id也包括在内。我无法按ID分组,因为每条记录都是唯一的,而不是通过电子邮件和名称进行分组。下面是我想要的:

{[1, "[email protected]", "User 1"]=>2, [2, "[email protected]", "User 2"]=>6]} 

任何帮助,将不胜感激。

回答 Attendance.joins(:用户)。集团(:电子邮件,:姓名, 'attendances.user_id')算

+0

它不应该是唯一的,除非你按'Attendence.id'? – salient

+0

通过ID分组将会是Attendence的ID。按照我假设在该表上的user_id进行分组,会给你想要的。 – mccalljt

+0

你将如何构造这个查询?我不断收到错误....“Attendance.joins(:user).group(:email,:name,'attendance.user_id')。count”我得到的错误是“ActiveRecord :: StatementInvalid:PG :: UndefinedTable :错误:缺少表“考勤”的FROM-clause条目“ – wipallen

回答

1
# collect required fields and group by email, name 
grouped_attendance = Attendance.joins(:user).pluck(:id, :email, :name).group_by{|r| [r[1], r[2]]} 

# calculate the counts 
attendance_counts = grouped_attendance.each{|k,v| grouped_attendance[k] = v.count} 

根据您的设置,但上面的应该是足够快。因为你没有实例化ActiveRecord对象。

+0

感谢您的回应!当我尝试第一个查询时出现以下错误:[1,“email @ examplecom”,“User 1”]未定义方法'email':Array – wipallen

+0

更正了语法 - r是数组(不是对象) - 将必须使用数组索引进行分组 – mintuhouse

0

Attendance.joins(:用户)。集团(:电子邮件,:姓名, 'attendances.user_id')算