Attendance.joins(:user).group(:email, :name).count
上面的查询给出了以下结果。 “用户1”有2个出席,“用户2”有6个出席,另外我可以访问用户名和电子邮件。
{["email@example.com", "User 1"]=>2, ["email2@example.com", "User 2"]=>6]}
这很棒,除非我真的想要包含User.id。我不能按ID分组,因为每条记录都是唯一的,而不是按电子邮件和名称分组。以下是我想要的:
{[1, "email@example.com", "User 1"]=>2, [2, "email2@example.com", "User 2"]=>6]}
任何帮助将不胜感激。
答案 Attendance.joins(:user).group(:email,:name,'attendances.user_id')。count
答案 0 :(得分: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对象。
答案 1 :(得分:0)
Attendance.joins(:user).group(:email,:name,' attendances.user_id')。count