2017-05-13 21 views
0

我有一个评分模型,我需要从两列中提取平均值 - 准确度和时间。我正在使用以下查询将两个值一起取代而不是查询模型两次。通过ActiveRecord提取多个列的平均值

Grade.where(student_id: 25).pluck('avg(accuracy), avg(time)') 

我得到两个值好了,但他们在下面的格式,我不明白:

[[#<BigDecimal:7f9c5a890410,’8.0’,9(18)>, #<BigDecimal:7f9c5a8903c0,’10.0’,9(18)>]] 

我如何提取只是我从这个所需要的价值?即avg_accuracy = 8.0和avg_time = 10.0

我是Ruby,Rails,ActiveRecord的新手。我很感激帮助。

回答

2
grades = Grade.where(student_id: 25, class_id: 123).pluck('avg(accuracy), avg(time)').first 

应该得到

[#<BigDecimal:7f9c5a890410,’8.0’,9(18)>, #<BigDecimal:7f9c5a8903c0,’10.0’,9(18)>] 

,现在将它们转换成简单的浮动。

grades.map!(&:to_f) 

应该得到

[8.0, 10.0] 
+0

试过了。但是当我用pluck使用find_by时,它会返回以下错误。 NoMethodError:undefined方法'pluck'为# 另外,如果我不得不通过student_id查询,而且还需要class_id? – liquorishe

+0

你说得对。我更新了我的答案。如果你有多个条件,你可以传递一个包含多个键/值的散列到哪里。 'Grade.where(student_id:123,class_id:234)' – Ursus

+0

谢谢,这工作! :) 顺便说一句,我从查询中得到的结果是以数组的形式存在,就像这样[[#<...>,#<...>]] 所以我做了[0] .map!(&到F)。不知道这是否是一种好的做法,但它的工作。 非常感谢你的帮助。对此,我真的非常感激。 – liquorishe