2012-08-24 53 views
0

我需要转换相对简单的查询以显示Rails/HAML中设置的表中给定用户的总测验平均值。我们有用户参加测验,记录分数,并显示每个测验的平均值。我们现在要求所有测验的总平均数。简单:将SQL查询转换为Ruby on Rails

SELECT (ROUND(AVG(`score`*100), 1)) FROM `quiz_results` WHERE `user_id`=$user 

结果需要显示在已经建立的表格单元格中,但我无法弄清楚。

也许这条线会有所帮助。它是预先存在的代码,用于计算该用户的特定测验的平均值:

%td.separate="#{(((lesson.quiz_results.average('score', :conditions => "user_id = #{@user.id}")) * 100).to_i)}%" 

我有Rails 2.3.x.

+0

这是您的Haml的实际行文件?有一个Rails 2.6? (回复:金刚笔主页,“哲学”错字 - 可能会增加更多交叉检查。) –

+0

是的,和错字。 Rails 2.3.x.在OP中修复。 –

+0

Re。哲学 - 感谢老鹰的眼睛。 ::尴尬:: –

回答

0

好吧,正如我现在所看到的 - 您需要的只是删除特定的测验限制,这是由关联使用lesson.quiz_results强加 - 而不是它只是使用模型类,这很可能是QuizResult

而且,您现有的代码中还有一个小错误 - .to_i会四舍五入,您应该使用.round。看到其中的差别:

irb(main):002:0> 1.6.to_i 
=> 1 
irb(main):003:0> 1.6.round 
=> 2 

所以,完整的代码应该是:

(QuizResult.average('score', :conditions => "user_id = #{@user.id}") * 100).round 

(我也删除了一些不必要的括号内)

+0

在HAML文件中有这个:%td(QuizResult.average('score',:conditions =>“user_id = #{@user.id}”)* 100).round但是它显示为quiz_results.average('score',:conditions =>“user_id = 4349”)* 100).round试着围绕它添加#{},没有运气。谢谢 –

+0

布拉赫。我是个白痴。这工作:%td =“#{(QuizResult.average('score',:conditions =>”user_id = #{@user.id}“)* 100).round}%”非常感谢您的帮助! –