2017-04-19 79 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')算