ActiveRecord ::分组对象的关系查询

时间:2012-05-05 08:09:24

标签: ruby-on-rails ruby-on-rails-3

我有三个模型UserSubjectGrade

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 - 每个组的对象等级。

1 个答案:

答案 0 :(得分:3)

我想你需要这样的东西:

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