2012-08-24 2 views
0

Rails/HAML에 설정된 테이블에서 주어진 사용자에 대한 총 퀴즈 평균을 표시하는 비교적 간단한 쿼리를 변환해야합니다. 사용자는 퀴즈를 풀고 점수를 기록하고 퀴즈 당 평균을 표시합니다. 이제 모든 퀴즈의 평균을 구합니다. Easy :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)}%" 

나는 레일즈 2.3.x가 있습니다.

+0

은 HAML의 실제 라인은 그 파일 것 (나는 또한 불필요한 괄호를 제거)? Rails 2.6이 있습니까? (Re : 다이아몬드 펜 홈페이지, "Philosophy"typo - 어쩌면 더 많은 교차 체크를 추가 할 수 있습니다.) –

+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). quiz_results.average ('score', : conditions => 'user_id = 4349') * 100). 주위에 # {#}를 추가하여 시도해보십시오. 고마워요. –

+0

Blah. 나는 바보 야. 이것은 효과적이었습니다 : % td = "# {(QuizResult.average ('score', : conditions =>"user_id = #{@user.id} ") * 100) .round} %"도와 줘서 고마워! –

관련 문제