2016-05-13 52 views
0

我有以下幾列的examscore模型一個Fixnum循環:通過在軌

academic_year_id,grade_id,student_id數據,subject_id,total_score

,並用這些的averagescore模型列:

academic_year_id ,grade_id,student_id數據,平均

我的要求是由academic_year_idgrade_id通過Examscore模型迭代,並計算出每個學生由學生所採取的所有科目的平均分(即總結所有科目的總成績除以受試者的數量),然後將該平均值存儲在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

任何關於如何處理這個問題的指導?

回答

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 
+0

這樣做的伎倆。乾杯 –