2010-05-26 6 views
0

J'essaie de noter une application de quiz que je voudrais faire. J'ai un modèle de questions avec et demande (la question réelle), 4 choix (a-d), et une réponse correcte (chaîne).Rails - Aide à la notation d'un quiz en ligne dans RoR

Dans la vue j'ai la question 4 affichée alors le bon choix de réponse (Ceci est juste un test de fonctionnalité) et puis j'ai créé un text_field pour accepter le choix des utilisateurs et un bouton pour rafraîchir l'action d'index la logique de notation, pour l'instant ..

- Dois-je mettre le champ text_field dans un formulaire_tag?

<p>1. <%= h @question.q1 %></p> 
<p>2. <%= h @question.q2 %></p> 
<p>3. <%= h @question.q3 %></p> 
<p>4. <%= h @question.q4 %></p> 
<p>Answer: <%= h @question.correct %></p> 
<%= text_field_tag :choice, params[:choice] %> 
<%= button_to "Grade", {:controller => 'site', :action => "index"} %> 
<p> <%= @answer %></p> 

Heres le contrôleur d'index d'action

def index 
     @question = Question.find(1) 
     if @question.correct == params[:choice] 
      @answer = 'right' 
     else 
       @answer = 'wrong' 
     end 
end 

Son pas vraiment de travail. Le champ de texte est supposé prendre un choix de lettre comme 'a' ou 'c' et le comparer avec la bonne réponse dans la base de données. J'aurais aimé que cela fonctionne par radiobuttons, mais je suis un débutant aux rails ainsi j'ai pensé que je prendrais des pas de bébé.

Donc, si quelqu'un peut m'aider avec la façon de résoudre ce problème par chaîne, ou de préférence par des boutons radio, je l'apprécierais vraiment.

Répondre

2

Voilà comment je le ferais:

# in app/controller/QuestionsController 
def index 
    @question = Question.find(1) 
    @grade = params[:choice] == @question.answer ? 'PASS' : 'FAIL' 
end 

Il faudra une route nommée dans votre fichier config/routes.rb:

map.questions 'questions', :controller => 'questions', :action => 'index' 

puis, dans app/views/index.html.erb:

<h2><%=h @question.question_text %></h2> 

<ol> 
    <li><%=h @question.q1 %></li> 
    <li><%=h @question.q2 %></li> 
    <li><%=h @question.q3 %></li> 
    <li><%=h @question.q4 %></li> 
</ol> 

<p> 
    Correct answer <%=h @question.correct %> 
</p> 

<% form_tag do %> 
    <p>Choice? <%= text_field_tag :choice %></p> 
    <%= submit_tag 'Grade' %> 
<% end %> 

<p>Grade: <%= @grade %></p> 

I pourrait vous donner une aide plus spécifique si vous fournissiez votre fichier routes.rb comme le reste de votre code de contrôleur. La réponse ci-dessus n'est pas du tout RESTful. Si cela est important pour vous, la configuration des routes sera différente, ainsi que le code du contrôleur. En outre, avec la conception RESTful, vous pouvez utiliser un appel de méthode form_for dans votre affichage, ce qui est plus standard ces jours-ci.

0

Au moment où votre code ignorera le texte entré. L'entrée de l'utilisateur doit être soit affichée (via un formulaire de soumission bouton &) ou via un get (peut également être fait avec un formulaire).

Dans ce cas, je vous suggère de le mettre dans l'étiquette de formulaire et d'ajouter un bouton de soumission. Ajoutez l'action nécessaire à votre contrôleur (save je crois dans ce cas), validez les données, puis restituez l'action d'index.