我正在尝试对我想要的测验应用进行评分。我有一个问题模型和问(实际问题),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,我真的很感激。
答案 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
我相信这种情况),验证数据,然后渲染索引操作。