试卷发送到课堂

dev_chen
cxt 5 years ago
parent 7dc99a9598
commit 83993dc99d

@ -330,7 +330,7 @@ class ApplicationController < ActionController::Base
end
if !User.current.logged? && Rails.env.development?
User.current = User.find 3117
User.current = User.find 1
end

@ -82,6 +82,14 @@ class ExaminationBanksController < ApplicationController
render_ok
end
def send_to_course
tip_exception(403, "无权限") unless @exam.public || @exam.user == current_user
course = Course.find params[:course_id]
exercise = Exercise.new(user_id: current_user.id, course_id: course.id)
exercise = ExaminationBanks::SendToCourseService.call(@exam, exercise)
render_ok({exercise_id: exercise.id})
end
private
def form_params

@ -6,6 +6,7 @@ class ExaminationBank < ApplicationRecord
has_many :tag_disciplines, through: :tag_discipline_containers
has_many :examination_items, -> {order(position: :asc)}, dependent: :destroy
has_many :exercises
def apply?
!public && ApplyAction.where(container_type: "ExaminationBank", container_id: id, status: 0).exists?

@ -12,6 +12,8 @@ class Exercise < ApplicationRecord
has_many :tidings, as: :container
has_many :course_acts, class_name: 'CourseActivity', as: :course_act, :dependent => :delete_all
belongs_to :examination_bank, optional: true
scope :is_exercise_published, -> { where("exercise_status > ? ",1)}
scope :unified_setting, -> { where("unified_setting = ?",true) }
scope :exercise_by_ids, lambda { |ids| where(id: ids) unless ids.blank? }

@ -3,6 +3,7 @@ class ExerciseQuestion < ApplicationRecord
belongs_to :exercise
belongs_to :shixun, optional: true
belongs_to :hack, optional: true
has_many :exercise_choices, :dependent => :delete_all
has_many :exercise_answers
@ -11,6 +12,8 @@ class ExerciseQuestion < ApplicationRecord
has_many :exercise_answer_comments
has_many :exercise_standard_answers
has_one :exercise_question_analysis, dependent: :destroy
scope :insert_question_ex, lambda {|k| where("question_number > ?",k)}
scope :find_by_custom, lambda {|k,v| where("#{k} = ?",v)} #根据传入的参数查找问题
scope :left_question_choose, lambda {|k,v| where("#{k} > ?",v)} #根据传入的参数查找问题

@ -0,0 +1,3 @@
class ExerciseQuestionAnalysis < ApplicationRecord
belongs_to :exercise_question
end

@ -19,6 +19,8 @@ class Hack < ApplicationRecord
# 知识点
has_many :tag_discipline_containers, as: :container, dependent: :destroy
has_one :exercise_question, dependent: :destroy
belongs_to :user
belongs_to :sub_discipline

@ -0,0 +1,63 @@
class ExaminationBanks::SendToCourseService < ApplicationService
attr_reader :exam, :exercise
def initialize(exam, exercise)
@exam = exam
@exercise = exercise
end
def call
ActiveRecord::Base.transaction do
exercise.exercise_name = exam.name
exercise.time = exam.duration.present? ? exam.duration : -1
exercise.save!
exam.examination_items.each_with_index do |item, index|
question = exercise.exercise_questions.new
question.question_type = question_type item.item_type
question.question_title = item.name
question.question_number = index + 1
question.question_score = item.score
question.is_md = false
if item.item_type == "PROGRAM"
new_hack = item.container.fork
question.hack_id = new_hack.id
question.save!
else
question.save!
ExerciseQuestionAnalysis.new(analysis: item.analysis, exercise_question_id: question.id)
item.item_choices.each_with_index do |choice, position|
question.exercise_choices << ExerciseChoice.new(choice_text: choice.choice_text, choice_position: position+1)
if choice.is_answer
question.exercise_standard_answers << ExerciseStandardAnswer.new(exercise_choice_id: position+1)
end
end
end
end
exam.increment!(:quotes)
end
exercise
end
def question_type item_type
question_type = case item_type
when 'SINGLE'
Exercise::SINGLE
when 'MULTIPLE'
Exercise::MULTIPLE
when 'JUDGMENT'
Exercise::JUDGMENT
when 'COMPLETION'
Exercise::COMPLETION
when 'SUBJECTIVE'
Exercise::SUBJECTIVE
when 'PRACTICAL'
Exercise::PRACTICAL
when 'PROGRAM'
Exercise::PROGRAM
end
question_type
end
end

@ -86,6 +86,7 @@ Rails.application.routes.draw do
member do
post :set_public
delete :revoke_item
post :send_to_course
end
post :cancel_items, on: :collection
end

@ -0,0 +1,5 @@
class AddHackIdToExerciseQuestions < ActiveRecord::Migration[5.2]
def change
add_column :exercise_questions, :hack_id, :integer, default: 0
end
end

@ -0,0 +1,10 @@
class CreateExerciseQuestionAnalyses < ActiveRecord::Migration[5.2]
def change
create_table :exercise_question_analyses do |t|
t.text :analysis
t.references :exercise_question, index: true, unique: true
t.timestamps
end
end
end

@ -0,0 +1,5 @@
class AddExaminationBankIdToExercise < ActiveRecord::Migration[5.2]
def change
add_column :exercises, :examination_bank_id, :integer, default: 0
end
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe ExerciseQuestionAnalysis, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end
Loading…
Cancel
Save