From d0b8a0a8ea031fb6452b008bf479e8304a66b213 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 20 Feb 2020 12:13:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=BA=E8=83=BD=E7=BB=84=E5=8D=B7=E6=8D=A2?= =?UTF-8?q?=E9=A2=98=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ination_intelligent_settings_controller.rb | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/app/controllers/examination_intelligent_settings_controller.rb b/app/controllers/examination_intelligent_settings_controller.rb index 8675e699e..e9456b3dc 100644 --- a/app/controllers/examination_intelligent_settings_controller.rb +++ b/app/controllers/examination_intelligent_settings_controller.rb @@ -42,11 +42,14 @@ class ExaminationIntelligentSettingsController < ApplicationController # 获取可选的题 items = OptionalItemQuery.call(@exam.sub_discipline_id, @exam.tag_discipline_containers.pluck(:tag_discipline_id), @exam.difficulty, @exam.public) + + # 可选题中去掉已组卷的试题 type_items = items.select{ |t_item| t_item.item_type == item.item_type } - # 如果可选的题数小于等于设置的题数则提示无可换的题 - tip_exception("无可换的题") if type_items.size <= exam_type_setting.count - # 可选题中去掉已组卷的同题型试题 - optional_item_ids = type_items.pluck(:id) - @exam.item_baskets.where(item_type: item.item_type).pluck(:item_bank_id) + optional_item_ids = (type_items.pluck(:id) - @exam.item_baskets.where(item_type: item.item_type).pluck(:item_bank_id)).uniq + + # 如果可选的题数等于0则提示无可换的题 + tip_exception("无可换的题") if optional_item_ids.size == 0 + new_item = ItemBank.find optional_item_ids.sample(1).first ActiveRecord::Base.transaction do @exam.item_baskets << ItemBasket.new(item_bank_id: new_item.id, position: item.position, score: item.score, item_type: new_item.item_type) @@ -62,13 +65,15 @@ class ExaminationIntelligentSettingsController < ApplicationController # 获取可选的题 items = OptionalItemQuery.call(@exam.sub_discipline_id, @exam.tag_discipline_containers.pluck(:tag_discipline_id), @exam.difficulty, @exam.public) type_items = items.select{ |t_item| t_item.item_type == params[:item_type] } - # 如果可选的题数小于等于设置的题数则提示无可换的题 - tip_exception("无可换的题") if type_items.size <= exam_type_setting.count - # 可选题中去掉已组卷的同题型试题 + + # 可选题中去掉已组卷的试题 choosed_item_ids = choosed_items.pluck(:item_bank_id) - optional_item_ids = type_items.pluck(:id) - choosed_item_ids + optional_item_ids = (type_items.pluck(:id) - choosed_item_ids).uniq + + # 如果可选的题数等于0则提示无可换的题 + tip_exception("无可换的题") if optional_item_ids.size == 0 - # 如果可选题数小于设置的题数n,则在原来的选题中随机选n个,确保换题时能选到新的题 + # 如果可选题数小于设置的题数(n),则在原来的选题中随机选n个,确保换题时能选到新的题 if optional_item_ids.size < exam_type_setting.count absence_count = exam_type_setting.count - optional_item_ids.size optional_item_ids = optional_item_ids + choosed_item_ids.sample(absence_count)