2013-12-02 3 views
0

Я пытаюсь создать веб-приложение для проверки множественного выбора, чтобы вы могли получить кучу вопросов на основе критериев поиска, а затем ответить на вопросы и получить обратную связь о том, правильно ли вы ответили или нет.Список элементов базы данных с формой radio_button

Мой questions_controller имеет следующий метод:

def check_answer 
    @question = Question.find(params[:id]) 
    if params[:response] == @question.answer 
    @outcome = 'correct' 
    else 
    @outcome = 'incorrect' 
    end 
    flash[:notice] = "That is #{@outcome}." 
    redirect_to :back 

где индекс раскладка:

<% @questions.each do |question| %> 
    <h4> <%= question.stem %></h4> 
    <%= form_tag "/check_answer/#{question.id}", :method => 'get' do%> 
    <%= radio_button_tag "response", "a" %> <%= question.option_a%> 
     <%= radio_button_tag "response", "b" %> <%= question.option_b%> 
    <%= radio_button_tag "response", "c" %> <%= question.option_c%> 
    <%= radio_button_tag "response", "d" %> <%= question.option_d%> 
    <%= radio_button_tag "response", "e" %> <%= question.option_e%>  
    <%= submit_tag "Check Answer" %> 
<% end %> 

<% if flash[:notice] %> 
<div class = "notice"><%= flash[:notice] %></div> 
<% end %> 

Однако, когда я выбираю один из переключателей, которые он возвращает «то есть (в) правильно» в нижней части КАЖДОГО вопроса. Это имеет смысл на основе кода, который я просто не знаю, как бы я его изменил, поэтому он отображает только «то, что правильно» внизу 1 вопроса, на который вы нажимаете «check answer».

ответ

0

По вашим вопросам попробуйте добавить фрагмент логики, чтобы комментировать результат.

Вид:

<% @correct_field ||= nil %> 
<% @questions.each do |question| %> 
    <h4> <%= question.stem %></h4> 
    <%= form_tag "/check_answer/#{question.id}", :method => 'get' do%> 
     <%= radio_button_tag "response", "a" %> <%= question.option_a%><% "CORRECT!" if @correct_field == "a" %> 
     <%= radio_button_tag "response", "b" %> <%= question.option_b%><% "CORRECT!" if @correct_field == "b" %> 
     <%= radio_button_tag "response", "c" %> <%= question.option_c%><% "CORRECT!" if @correct_field == "c" %> 
     <%= radio_button_tag "response", "d" %> <%= question.option_d%><% "CORRECT!" if @correct_field == "d" %> 
     <%= radio_button_tag "response", "e" %> <%= question.option_e%><% "CORRECT!" if @correct_field == "e" %>  
    <%= submit_tag "Check Answer" %> 
    <% end %> 

Контроллер:

def check_answer 
    @question = Question.find(params[:id]) 
    if params[:response] == @question.answer 
    @correct_field = @params[:response] 
    @outcome = 'correct' 
    else 
    @outcome = 'incorrect' 
    end 
    flash[:notice] = "That is #{@outcome}." 
    redirect_to :back 

В контроллере, просто установите @correct_field в зависимости от того, из params преобразуется в строку, представляющую выбор, как указано выше.

Тем не менее, я бы так не сделал. Это похоже на проблему, которая должна быть решена с помощью частичных и/или JavaScript-вызовов и вызовов AJAX. Надеюсь, что это поможет.

Смежные вопросы