Rails - 帮助在RoR中对在线测验进行评分

时间:2010-05-26 16:37:48

标签: ruby-on-rails forms textfield

我正在尝试对我想要的测验应用进行评分。我有一个问题模型和问(实际问题),4个选项(a-d)和一个正确的答案(字符串)。

在视图中我有4个问题被显示然后正确的答案选择(这只是对功能的测试)然后我创建了一个text_field来接受用户的答案选择和一个按钮来刷新索引动作得分逻辑,现在......

- 我是否需要将text_field放在form_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>

继承索引控制器操作

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

它没有真正起作用。文本字段应该采用字母选项,如“a”或“c”,并将其与数据库中的正确答案进行比较。

我希望通过radiobuttons来工作,但我是铁轨的新手,所以我想我会采取小步骤。

所以,如果有人可以帮我解决这个问题,或者最好是用radiobuttons,我真的很感激。

2 个答案:

答案 0 :(得分:2)

我将如何做到这一点:

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

如果您提供routes.rb文件以及控制器代码的其余部分,我可以为您提供更具体的帮助。上面的答案根本不是RESTful。如果这对您来说非常重要,那么路由配置以及控制器代码将会有所不同。此外,使用RESTful设计,您可以在视图中使用form_for方法调用,这些日子更为标准。

答案 1 :(得分:0)

目前您的代码将忽略输入的文字。用户输入需要发布(通过表单和提交按钮)或通过get(也可以使用表单)。

在这种情况下,我建议您将其放在表单标记中并添加提交按钮。向控制器添加必要的操作(save我相信这种情况),验证数据,然后渲染索引操作。