循环通过rails

时间:2016-05-13 22:03:32

标签: ruby-on-rails ruby loops ruby-on-rails-4

我有一个包含以下列的examscore模型:

  

academic_year_id,grade_id,student_id,subject_id,total_score

以及包含以下列的平均分数模型:

  

academic_year_id,grade_id,student_id,平均

我的要求是通过Examscoreacademic_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_idFixnum而不是Array

有关如何处理此问题的任何指导吗?

1 个答案:

答案 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