Rails - Помощь в оценке онлайн-викторины в RoR - PullRequest
0 голосов
/ 26 мая 2010

Я пытаюсь оценить приложение для викторины, которое я хотел бы сделать.У меня есть модель вопросов с и спросить (фактический вопрос), 4 варианта (объявление) и правильный ответ (строка).

В представлении у меня отображается 4 вопроса, затем правильный выбор ответа (это всего лишь тест на функциональность), а затем я создал текстовое поле, чтобы принять выбор ответа пользователя, и кнопку, чтобы обновить действие индекса.которая имеет логику скоринга, на данный момент ..

- Нужно ли помещать текстовое поле в теге формы?

<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>

Вот действие контроллера индекса

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

Это на самом деле не работает.Предполагается, что в текстовом поле выбирается буква типа «а» или «с» и сравнивается с правильным ответом в базе данных.

Мне бы хотелось, чтобы это работало с помощью радиокнопок, но я новичок врельсы, поэтому я думал, что я сделаю шаги для ребенка.

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

Ответы [ 2 ]

2 голосов
/ 27 мая 2010

Вот как бы я это сделал:

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

Для этого потребуется именованный маршрут в вашем config/routes.rb файле:

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

, а затем в 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>

Я мог бы оказать вам гораздо более конкретную помощь, если бы вы предоставили свой файл rout.rb, а также оставшуюся часть кода вашего контроллера. Приведенный выше ответ не является RESTful вообще. Если это вообще важно для вас, конфигурация маршрутов будет другой, как и код контроллера. Кроме того, в RESTful design вы можете использовать вызов метода form_for в своем представлении, что является более стандартным в наши дни.

0 голосов
/ 26 мая 2010

В данный момент ваш код будет игнорировать введенный текст. Пользовательский ввод должен быть либо опубликован (через форму и кнопку отправки), либо через get (также можно сделать с помощью формы).

В этом случае я бы посоветовал поместить его в тег формы и добавить кнопку отправки. Добавьте необходимое действие к вашему контроллеру (save Я полагаю, что в этом случае), проверьте данные, а затем выполните действие index.

...