2016-06-30 5 views
0

Ich habe jetzt für ein bisschen rätseln. Hier ist der Code:Kann nicht korrekte Antworten und falsche Antworten in meiner Quizanwendung angeben

<ol> 
    <% @quiz.questions.each do |question| %> 
    <li> <%= question.content %> </li> 


    <% question.answers.each do |answer| %> 

    <% @submitted_quiz.submitted_answers.each do |submitted_answer| %> 

    <% if(submitted_answer.content == answer.content && submitted_answer.got_correct) %> 
    <li><span class ='correct-answer'><%= answer.content %> CORRECT </span></li> 

    <% break %> 

    <% elsif(submitted_answer.content == answer.content && submitted_answer.question.id == answer.question.id && submitted_answer.got_incorrect) %> 
    <li><span class ='incorrect-answer'><%= answer.content %> INCORRECT</span></li> 

    <% break %> 

    <% elsif(submitted_answer.content != answer.content) %> 
    <li><span class ='normal-answer'> <%= answer.content %> NORMAL</span></li> 
    <% break %> 

    <% end # if statement%> 

    <% end # submitted_answers.each do%> 
    <% end # question.answers.each do |answer|%> 

    <% end # @quiz.questions.each do %> 

submitted_answers enthält alle Antworten für das Quiz, dass der angegebene Benutzer korrekt war. Zum Beispiel:

Q: What color is the sun? 
Blue 
Yellow 
Purple 
Green 

Und wenn der Benutzer Gelb gewählt hat, submitted_answersYellow in content:string Attribute enthalten würde, und ebenso über das got_correct Attribut true. Wenn der Benutzer Blue wählt, geschieht das gleiche wie zuvor, außer dass got_correct in seinem Standardzustand false bleibt und ein anderes Attribut got_incorrect auf true gesetzt wird. Die Logik dafür ist bereits abgeschlossen und es funktioniert gut. Mein Problem ist, dass ich alle Fragen und Antworten für das Quiz anzeigen möchte, und wenn die Antwort der submitted_answers entspricht und die got_correct des Letzteren stimmt, zeige ich an, dass der Benutzer die Frage richtig beantwortete, indem er die Antwort in grün hervorhebt. Wenn die Antwort einer der submitted_answers entspricht und die got_incorrect des Letzteren stimmt, zeige ich an, dass der Benutzer die Frage falsch beantwortet hat, indem er die Antwort rot markiert hat.

Mein Code oben funktioniert nicht, weil ich weiter über eine submitted_answer iterieren, auch nachdem ich die submitted_answer an eine answer angepasst habe. Der Code funktioniert also für die erste Frage und funktioniert nicht für die restlichen Fragen. Wie soll ich das beheben?

+0

Was meinst du damit ‚normale Antwort‘? Habe diesen Fall nicht bekommen –

Antwort

0

Versuchen Sie folgendes:

<ol> 
    <% @quiz.questions.each do |question| %> 
    <li> <%= question.content %> </li> 


    <% question.answers.each do |answer| %> 

     <% @submitted_quiz.submitted_answers.each do |submitted_answer| %> 

      <% if(submitted_answer.content == answer.content && submitted_answer.got_correct) %> 
      <li><span class ='correct-answer'><%= answer.content %> CORRECT </span></li> 

      <% break %> 

      <% elsif(submitted_answer.content == answer.content && submitted_answer.question.id == answer.question.id && submitted_answer.got_incorrect) %> 
      <li><span class ='incorrect-answer'><%= answer.content %> INCORRECT</span></li> 

      <% break %> 

      <% elsif(submitted_answer.content != answer.content) %> 
      <li><span class ='normal-answer'> <%= answer.content %> NORMAL</span></li> 
      <% break %> 

      <% end # if statement%> 
      <% next %> 
     <% end # submitted_answers.each do%> 
    <% end # question.answers.each do |answer|%> 

    <% end # @quiz.questions.each do %> 
</ol> 
0

Es scheint, dass Ihr Problem wegen zu werden verursacht wird, was Sie den Versatz zwischen @quiz.questions.answers und @submitted_quiz.submitted_answers nennen könnte. Für jede Frage und dann jede offizielle Antwort durchlaufen Sie jede einzelne der Benutzerantworten. So würde das erwartete Ergebnis in eine break nach der ersten Frage laufen.

Wenn @submitted_quiz.submitted_answers ist eine parallele Anordnung zu @quiz.questions.answers, können Sie so etwas wie die folgenden Änderungen vornehmen:

<ol> 
    <% @quiz.questions.each do |question| %> 
    <li> <%= question.content %> </li> 

    <% question.answers.each_with_index do |answer, index| 
     user_answer = @submitted_quiz.submitted_answers[index] 
    %> 

    <% if(user_answer.content == answer.content && user_answer.got_correct) %> 
    <li><span class ='correct-answer'><%= answer.content %> CORRECT </span></li> 

    <% break %> 

    <% elsif(user_answer.content == answer.content && user_answer.question.id == answer.question.id && user_answer.got_incorrect) %> 
    <li><span class ='incorrect-answer'><%= answer.content %> INCORRECT</span></li> 

    <% break %> 

    <% elsif(user_answer.content != answer.content) %> 
    <li><span class ='normal-answer'> <%= answer.content %> NORMAL</span></li> 
    <% break %> 

    <% end # if statement%> 

    <% end # question.answers.each do |answer|%> 

    <% end # @quiz.questions.each do %> 
Verwandte Themen