我有三个模型User
,Subject
和Grade
。
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
用户可以为同一主题提供多个等级。
在用户的页面上,我想为每个主题显示他的average
和maximum
成绩。
完成它的最佳方法是什么?
User: Qwerty
Grades:
-------------------------------
subject average maximum
-------------------------------
"subject_1" 56 97
"subject_2" 45 85
据我所知,ActiveRecord::Relation有maximum
和average
的特殊方法,但我不知道如何获取ActiveRecord::Relation
- 每个组的对象等级。
答案 0 :(得分:3)
我想你需要这样的东西:
user.grades.joins(:subject).
group(:subject_id).
select(['MAX(grades.grade) as max', 'AVG(grades.grade) as avg', subjects: :name])