2012-05-05 126 views
3

我有三個模型User,SubjectGradeActiveRecord ::分組對象的關係查詢

class User< ActiveRecord::Base 
    has_many :grades 
end 

class Subject < ActiveRecord::Base 
    has_many :grades 
end 

class Grade < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :subject 
end 

用戶對同一主題可以有幾個等級。

在用戶的頁面上,我想爲每個主題顯示他的averagemaximum年級。 完成它的最佳方法是什麼?

User: Qwerty 
Grades: 
------------------------------- 
subject  average maximum 
------------------------------- 
"subject_1" 56  97 
"subject_2" 45  85 

據我所知,ActiveRecord::Relationmaximumaverage特殊的方法,但我不知道怎麼去ActiveRecord::Relation -object每個組的等級。

回答

3

我想你需要的東西,如:

user.grades.joins(:subject). 
    group(:subject_id). 
    select(['MAX(grades.grade) as max', 'AVG(grades.grade) as avg', subjects: :name]) 
+0

感謝偉大的解決方案!順便說一句,它似乎沒有'.joins(:主題)',查詢仍然正常工作。 – user1179942