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 %> +
  • <%= sidebar_item(admins_disciplines_path, '课程体系', icon: 'sitemap', controller: 'admins-disciplines') %>
  • +
  • <%= sidebar_item_group('#course-submenu', '课堂管理', icon: 'book') do %>
  • <%= sidebar_item(admins_course_lists_path, '课程列表', icon: 'list', controller: 'admins-course_lists') %>
  • diff --git a/config/routes.rb b/config/routes.rb index 8520e9415..d4baf6dee 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1257,6 +1257,10 @@ Rails.application.routes.draw do resources :courses, only: [:index, :destroy, :update] resources :projects, only: [:index, :destroy] + + resources :disciplines, only: [:index, :create, :update, :destroy] do + + end end namespace :cooperative do diff --git a/db/migrate/20191219095652_create_item_bank_tag_repertoires.rb b/db/migrate/20191219095652_create_item_bank_tag_repertoires.rb deleted file mode 100644 index c6ce93bc6..000000000 --- a/db/migrate/20191219095652_create_item_bank_tag_repertoires.rb +++ /dev/null @@ -1,10 +0,0 @@ -class CreateItemBankTagRepertoires < ActiveRecord::Migration[5.2] - def change - create_table :item_bank_tag_repertoires do |t| - t.references :item_bank, index: true - t.references :tag_repertoire, index: true - - t.timestamps - end - end -end diff --git a/db/migrate/20191225094354_create_disciplines.rb b/db/migrate/20191225094354_create_disciplines.rb new file mode 100644 index 000000000..7118c879e --- /dev/null +++ b/db/migrate/20191225094354_create_disciplines.rb @@ -0,0 +1,12 @@ +class CreateDisciplines < ActiveRecord::Migration[5.2] + def change + create_table :disciplines do |t| + t.string :name + t.boolean :subject + t.boolean :shixun + t.boolean :question + + t.timestamps + end + end +end diff --git a/db/migrate/20191225094635_create_sub_disciplines.rb b/db/migrate/20191225094635_create_sub_disciplines.rb new file mode 100644 index 000000000..44bbd94d5 --- /dev/null +++ b/db/migrate/20191225094635_create_sub_disciplines.rb @@ -0,0 +1,13 @@ +class CreateSubDisciplines < ActiveRecord::Migration[5.2] + def change + create_table :sub_disciplines do |t| + t.references :discipline, index: true + t.string :name + t.boolean :subject + t.boolean :shixun + t.boolean :question + + t.timestamps + end + end +end diff --git a/db/migrate/20191225094726_create_tag_disciplines.rb b/db/migrate/20191225094726_create_tag_disciplines.rb new file mode 100644 index 000000000..93fe82cdc --- /dev/null +++ b/db/migrate/20191225094726_create_tag_disciplines.rb @@ -0,0 +1,13 @@ +class CreateTagDisciplines < ActiveRecord::Migration[5.2] + def change + create_table :tag_disciplines do |t| + t.references :sub_discipline, index: true + t.string :name + t.boolean :subject + t.boolean :shixun + t.boolean :question + + t.timestamps + end + end +end diff --git a/db/migrate/20191225094954_migrate_item_bank_tag_column.rb b/db/migrate/20191225094954_migrate_item_bank_tag_column.rb new file mode 100644 index 000000000..d8ac00008 --- /dev/null +++ b/db/migrate/20191225094954_migrate_item_bank_tag_column.rb @@ -0,0 +1,6 @@ +class MigrateItemBankTagColumn < ActiveRecord::Migration[5.2] + def change + remove_column :item_banks, :sub_repertoire_id + add_column :item_banks, :sub_discipline_id, :integer, index: true + end +end diff --git a/db/migrate/20191225095734_create_tag_discipline_containers.rb b/db/migrate/20191225095734_create_tag_discipline_containers.rb new file mode 100644 index 000000000..d63c6ffae --- /dev/null +++ b/db/migrate/20191225095734_create_tag_discipline_containers.rb @@ -0,0 +1,13 @@ +class CreateTagDisciplineContainers < ActiveRecord::Migration[5.2] + def change + create_table :tag_discipline_containers do |t| + t.references :tag_discipline, index: true + t.integer :container_id + t.string :container_type + + t.timestamps + end + + add_index :tag_discipline_containers, [:container_type, :container_id], name: "index_on_container" + end +end diff --git a/spec/models/item_bank_tag_repertoire_spec.rb b/spec/models/discipline_spec.rb similarity index 61% rename from spec/models/item_bank_tag_repertoire_spec.rb rename to spec/models/discipline_spec.rb index dce195849..71a5f8236 100644 --- a/spec/models/item_bank_tag_repertoire_spec.rb +++ b/spec/models/discipline_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe ItemBankTagRepertoire, type: :model do +RSpec.describe Discipline, type: :model do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/models/sub_discipline_spec.rb b/spec/models/sub_discipline_spec.rb new file mode 100644 index 000000000..2eb9e22cd --- /dev/null +++ b/spec/models/sub_discipline_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe SubDiscipline, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/tag_discipline_container_spec.rb b/spec/models/tag_discipline_container_spec.rb new file mode 100644 index 000000000..268479e99 --- /dev/null +++ b/spec/models/tag_discipline_container_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TagDisciplineContainer, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/tag_discipline_spec.rb b/spec/models/tag_discipline_spec.rb new file mode 100644 index 000000000..90055a756 --- /dev/null +++ b/spec/models/tag_discipline_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TagDiscipline, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end