【问题标题】:Rails - Help scoring an online quiz in RoRRails - 帮助在 RoR 中进行在线测验
【发布时间】:2010-05-26 16:37:48
【问题描述】:

我正在尝试为我想做的一个测验应用评分。我有一个问题模型,其中包含并询问(实际问题)、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”之类的字母,并将其与数据库中的正确答案进行比较。

我希望这可以通过单选按钮工作,但我是 Rails 的新手,所以我想我会采取婴儿步骤。

所以,如果有人可以帮助我解决这个问题,我会非常感激。

【问题讨论】:

    标签: ruby-on-rails forms textfield


    【解决方案1】:

    我会这样做:

    # 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 方法调用,这在当今更为标准。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        相关资源
        最近更新 更多