Attendance.joins(:user).group(:email, :name).countLa consulta anterior me da los siguientes resultados. El "Usuario 1" tuvo 2 asistencias y el "Usuario 2" tuvo 6 asistencias, además tengo acceso al nombre de usuario y correo electrónico.
{["email@example.com", "User 1"]=>2, ["email2@example.com", "User 2"]=>6]}Esto es genial, excepto que realmente me gustaría que el User.id también se incluyera. No puedo agrupar por ID porque entonces cada registro será único en lugar de estar agrupado por correo electrónico y nombre. Lo siguiente es lo que me gustaría:
{[1, "email@example.com", "User 1"]=>2, [2, "email2@example.com", "User 2"]=>6]}Cualquier ayuda sería apreciada.
Responda Asistencia.joins(:usuario).grupo(:email, :nombre, 'asistencias.user_id').count
Attendance.joins(:user).group(:email, :name, 'attendances.user_id').count
# 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}Dependiendo de su configuración, pero lo anterior debería ser lo suficientemente rápido ya que no está instanciando objetos ActiveRecord.