我正在我的网络上制作一个测试应用程序,用户可以在其中看到一个检查列表,标记所有适用的内容并根据他选择的内容获得结果。
每个问题都有一个类别和一个值,并且 id 喜欢获取得分最高的类别(将每个类别的所有值相加并返回最高的)
我已经取得了一些成功,通过下面的代码,我将所有回答的问题分数加在一起,而不考虑每个问题属于哪个类别
@test_session.answered_questions.each do |a|
if a.answer == 1
@theResult.score = @theResult.score + a.q_value
end
@theResult.save!
end
问题是复选框,所以如果answer == 1
复选框被标记
问题是类别的数量是动态的..
我有一个想法,我可以循环@test_session.answered_questions.category.each
将类别值添加到一些变量中,并在计算所有类别分数时进行比较,但是我将有动态数量的变量进行比较
我觉得我应该为此使用一些地图功能
更新
这是我设置问题类别属性的方法
<%= nested_form_for @personal_test do |f| %>
<div class="field">
<%= f.label "Name" %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label "Description" %>
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.fields_for :questions do |ff| %>
<%= ff.label "Question" %>
<%= ff.text_field :question_text %>
<%= ff.label "Question value" %>
<%= ff.number_field :value %>
<%= ff.select :category, options_for_select(Category.all.collect {|p| [ p.name, p.id ] }, :selected => ff.object.category), :prompt => 'Category' %>
<% end %>
<% end %>