diff --git a/app/controllers/admins/repertoires_controller.rb b/app/controllers/admins/repertoires_controller.rb new file mode 100644 index 000000000..64778fba4 --- /dev/null +++ b/app/controllers/admins/repertoires_controller.rb @@ -0,0 +1,6 @@ +class Admins::DisciplinesController < Admins::BaseController + + def index + + end +end \ No newline at end of file diff --git a/app/controllers/item_banks_controller.rb b/app/controllers/item_banks_controller.rb index 767d3d61f..d13244685 100644 --- a/app/controllers/item_banks_controller.rb +++ b/app/controllers/item_banks_controller.rb @@ -51,7 +51,7 @@ class ItemBanksController < ApplicationController end def form_params - params.permit(:repertoire_id, :sub_repertoire_id, :item_type, :difficulty, :name, :analysis, tag_repertoire_id: [], choices: %i[choice_text is_answer]) + params.permit(:discipline_id, :sub_discipline_id, :item_type, :difficulty, :name, :analysis, tag_discipline_id: [], choices: %i[choice_text is_answer]) end end \ No newline at end of file diff --git a/app/forms/item_banks/save_item_form.rb b/app/forms/item_banks/save_item_form.rb index b92df1d89..2bfd99fc3 100644 --- a/app/forms/item_banks/save_item_form.rb +++ b/app/forms/item_banks/save_item_form.rb @@ -1,10 +1,10 @@ class ItemBanks::SaveItemForm include ActiveModel::Model - attr_accessor :repertoire_id, :sub_repertoire_id, :item_type, :difficulty, :name, :analysis, :tag_repertoire_id, :choices + attr_accessor :discipline_id, :sub_discipline_id, :item_type, :difficulty, :name, :analysis, :tag_discipline_id, :choices - validates :repertoire_id, presence: true - validates :sub_repertoire_id, presence: true + validates :discipline_id, presence: true + validates :sub_discipline_id, presence: true validates :item_type, presence: true, inclusion: {in: %W(SINGLE MULTIPLE JUDGMENT COMPLETION SUBJECTIVE PRACTICAL PROGRAM)} validates :difficulty, presence: true, inclusion: {in: 1..3}, numericality: { only_integer: true } validates :name, presence: true, length: { maximum: 1000 } diff --git a/app/models/discipline.rb b/app/models/discipline.rb new file mode 100644 index 000000000..a58f557aa --- /dev/null +++ b/app/models/discipline.rb @@ -0,0 +1,3 @@ +class Discipline < ApplicationRecord + has_many :sub_disciplines, dependent: :destroy +end diff --git a/app/models/item_bank.rb b/app/models/item_bank.rb index 6bc18bac7..b24d247a9 100644 --- a/app/models/item_bank.rb +++ b/app/models/item_bank.rb @@ -4,13 +4,13 @@ class ItemBank < ApplicationRecord # item_type: 0 单选 1 多选 2 判断 3 填空 4 简答 5 实训 6 编程 belongs_to :user - belongs_to :sub_repertoire + belongs_to :sub_discipline has_one :item_analysis, dependent: :destroy has_many :item_choices, dependent: :destroy has_many :item_baskets, dependent: :destroy - has_many :item_bank_tag_repertoires, dependent: :destroy - has_many :tag_repertoires, through: :item_bank_tag_repertoires + has_many :tag_discipline_containers, as: :container, dependent: :destroy + has_many :tag_disciplines, through: :tag_discipline_containers def analysis item_analysis&.analysis diff --git a/app/models/item_bank_tag_repertoire.rb b/app/models/item_bank_tag_repertoire.rb deleted file mode 100644 index 271cad6b0..000000000 --- a/app/models/item_bank_tag_repertoire.rb +++ /dev/null @@ -1,4 +0,0 @@ -class ItemBankTagRepertoire < ApplicationRecord - belongs_to :item_bank - belongs_to :tag_repertoire -end diff --git a/app/models/sub_discipline.rb b/app/models/sub_discipline.rb new file mode 100644 index 000000000..453cf6071 --- /dev/null +++ b/app/models/sub_discipline.rb @@ -0,0 +1,4 @@ +class SubDiscipline < ApplicationRecord + belongs_to :discipline + has_many :tag_disciplines, dependent: :destroy +end diff --git a/app/models/tag_discipline.rb b/app/models/tag_discipline.rb new file mode 100644 index 000000000..2f279aafd --- /dev/null +++ b/app/models/tag_discipline.rb @@ -0,0 +1,3 @@ +class TagDiscipline < ApplicationRecord + belongs_to :sub_discipline +end diff --git a/app/models/tag_discipline_container.rb b/app/models/tag_discipline_container.rb new file mode 100644 index 000000000..585182bbf --- /dev/null +++ b/app/models/tag_discipline_container.rb @@ -0,0 +1,5 @@ +class TagDisciplineContainer < ApplicationRecord + belongs_to :tag_discipline + + belongs_to :container, polymorphic: true, optional: true +end diff --git a/app/queries/item_bank_query.rb b/app/queries/item_bank_query.rb index 34db153f0..eb57422df 100644 --- a/app/queries/item_bank_query.rb +++ b/app/queries/item_bank_query.rb @@ -15,12 +15,12 @@ class ItemBankQuery < ApplicationQuery items = ItemBank.where(user_id: User.current.id) end - if params[:tag_repertoire_id].present? - items = items.joins(:item_bank_tag_repertoires).where(item_bank_tag_repertoires: {tag_repertoire_id: params[:tag_repertoire_id]}) - elsif params[:sub_repertoire_id].present? - items = items.where(sub_repertoire_id: params[:sub_repertoire_id]) - elsif params[:repertoire_id].present? - items = items.joins(:sub_repertoire).where(sub_repertoires: {repertoire_id: params[:repertoire_id]}) + if params[:tag_discipline_id].present? + items = items.joins(:tag_discipline_containers).where(tag_discipline_containers: {tag_discipline_id: params[:tag_discipline_id]}) + elsif params[:sub_discipline_id].present? + items = items.where(sub_discipline_id: params[:sub_discipline_id]) + elsif params[:discipline_id].present? + items = items.joins(:sub_discipline).where(sub_disciplines: {discipline_id: params[:discipline_id]}) end items = items.where(item_type: params[:item_type].to_i) if params[:item_type].present? diff --git a/app/services/item_banks/save_item_service.rb b/app/services/item_banks/save_item_service.rb index c747d6522..0ae25661a 100644 --- a/app/services/item_banks/save_item_service.rb +++ b/app/services/item_banks/save_item_service.rb @@ -14,7 +14,7 @@ class ItemBanks::SaveItemService < ApplicationService ActiveRecord::Base.transaction do item.item_type = params[:item_type] if new_record item.difficulty = params[:difficulty] - item.sub_repertoire_id = params[:sub_repertoire_id] + item.sub_discipline_id = params[:sub_discipline_id] item.name = params[:name].strip item.save! @@ -23,13 +23,13 @@ class ItemBanks::SaveItemService < ApplicationService analysis.save # 知识点的创建 - new_tag_repertoire_ids = params[:tag_repertoire_id] - old_tag_repertoire_ids = item.item_bank_tag_repertoires.pluck(:tag_repertoire_id) - delete_tag_repertoire_ids = old_tag_repertoire_ids - new_tag_repertoire_ids - create_tag_repertoire_ids = new_tag_repertoire_ids - old_tag_repertoire_ids - item.item_bank_tag_repertoires.where(tag_repertoire_id: delete_tag_repertoire_ids).destroy_all - create_tag_repertoire_ids.each do |tag_id| - item.item_bank_tag_repertoires << ItemBankTagRepertoire.new(tag_repertoire_id: tag_id) + new_tag_discipline_ids = params[:tag_discipline_id] + old_tag_discipline_ids = item.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 + item.tag_discipline_containers.where(tag_discipline_id: delete_tag_discipline_ids).destroy_all + create_tag_discipline_ids.each do |tag_id| + item.tag_discipline_containers << TagDisciplineContainer.new(tag_discipline_id: tag_id) end # 选项的创建 diff --git a/app/views/admins/shared/_sidebar.html.erb b/app/views/admins/shared/_sidebar.html.erb index 4b84068e7..77501a354 100644 --- a/app/views/admins/shared/_sidebar.html.erb +++ b/app/views/admins/shared/_sidebar.html.erb @@ -38,6 +38,8 @@ <% end %> +