2012-08-24 60 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}%」非常感謝您的幫助! –