You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
1.1 KiB
30 lines
1.1 KiB
class ExaminationBanks::SaveExaminationBankService < ApplicationService
|
|
attr_reader :exam, :params
|
|
|
|
def initialize(exam, params)
|
|
@exam = exam
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
ExaminationBanks::SaveExamForm.new(params).validate!
|
|
|
|
exam.name = params[:name].to_s.strip
|
|
exam.difficulty = params[:difficulty]
|
|
exam.duration = params[:duration].present? ? params[:duration].to_i : nil
|
|
exam.sub_discipline_id = params[:sub_discipline_id]
|
|
exam.save!
|
|
|
|
# 知识点的创建
|
|
new_tag_discipline_ids = params[:tag_discipline_id] || []
|
|
old_tag_discipline_ids = exam.tag_discipline_containers.pluck(:tag_discipline_id)
|
|
delete_tag_discipline_ids = old_tag_discipline_ids - new_tag_discipline_ids
|
|
create_tag_discipline_ids = new_tag_discipline_ids - old_tag_discipline_ids
|
|
exam.tag_discipline_containers.where(tag_discipline_id: delete_tag_discipline_ids).destroy_all
|
|
create_tag_discipline_ids.each do |tag_id|
|
|
exam.tag_discipline_containers << TagDisciplineContainer.new(tag_discipline_id: tag_id)
|
|
end
|
|
|
|
exam
|
|
end
|
|
end |