我有一个包含以下列的examscore模型:
academic_year_id,grade_id,student_id,subject_id,total_score
以及包含以下列的平均分数模型:
academic_year_id,grade_id,student_id,平均
我的要求是通过Examscore
和academic_year_id
遍历grade_id
模型,并计算每个学生对所有学生的平均分数(即总分)所有受试者除以受试者数量)然后将平均值存储在AverageScore
模型中。我发现这很困难,任何帮助都将非常感激。
到目前为止,我所做的是:
total = 0
counter = 0
scores = Examscore.where(:academic_year_id => 3, :grade_id => 4)
scores.each do |std|
std.student_id.each do |tot|
total += tot.total_score
counter += 1
end
puts total.fdiv(counter)
但它失败了,因为std.student_id
是Fixnum
而不是Array
。
有关如何处理此问题的任何指导吗?
答案 0 :(得分:0)
由于这是某种学校项目,我假设桌子不是那么大。因此,这应该可以解决问题:
scores = Examscore.where(academic_year_id: 3, grade_id: 4)
scores.group_by(&:student_id).each do |student_id, examscores|
average = examscores.sum(&:total_score) / examscores.size.to_f
AverageScore.create academic_year_id: 3, grade_id: 4,
student_id: student_id, average: average
end