在Rails中,当您使用has_many :through
关联创建多对多关系时,您可能需要对Active Record关系进行分组。以下是如何在has_many :through
关联上对Active Record关系进行分组的方法:
has_many :through
关联。例如,假设您有三个模型:Student
(学生)、Course
(课程)和Enrollment
(选课)。您可以在Student
和Course
模型中定义关联如下:class Student< ApplicationRecord
has_many :enrollments
has_many :courses, through: :enrollments
end
class Course< ApplicationRecord
has_many :enrollments
has_many :students, through: :enrollments
end
group
方法对关联进行分组。例如,要根据课程类型对学生进行分组,您可以执行以下查询:Student.joins(:courses).group('courses.category').count
这将返回一个哈希,其中键是课程类型,值是具有该类型课程的学生数量。
Student.joins(:courses).group('courses.category', :gender).count
这将返回一个哈希,其中键是课程类型和学生性别的组合,值是具有这些属性的学生数量。
group_by
方法。例如,要根据课程类型对学生进行分组,并计算每个类型的学生数量和平均年龄,您可以执行以下查询:Student.joins(:courses).group_by(&:courses_category) do |category, students|
{
category: category,
student_count: students.size,
average_age: students.average(:age)
}
end
这将返回一个哈希,其中键是课程类型,值是一个哈希,包含学生数量和平均年龄。
请注意,上述示例中的关联和属性名称可能需要根据您的实际应用程序进行调整。
领取专属 10元无门槛券
手把手带您无忧上云