私は自分のWebでテストアプリを作成しています。このアプリでは、ユーザーがチェックリストを表示し、該当するものすべてにマークを付けて、選択した内容に基づいて結果を取得できます。
すべての質問にはカテゴリと値があり、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 %>