diff --git a/app/controllers/disciplines_controller.rb b/app/controllers/disciplines_controller.rb new file mode 100644 index 000000000..09d6f49a0 --- /dev/null +++ b/app/controllers/disciplines_controller.rb @@ -0,0 +1,6 @@ +class DisciplinesController < ApplicationController + + def index + + end +end \ No newline at end of file diff --git a/app/models/discipline.rb b/app/models/discipline.rb index a58f557aa..8d6a16ced 100644 --- a/app/models/discipline.rb +++ b/app/models/discipline.rb @@ -1,3 +1,7 @@ class Discipline < ApplicationRecord has_many :sub_disciplines, dependent: :destroy + + has_many :shixun_sub_disciplines, -> { where("shixun = 1") }, class_name: "SubDiscipline" + has_many :subject_sub_disciplines, -> { where("subject = 1") }, class_name: "SubDiscipline" + has_many :question_sub_disciplines, -> { where("question = 1") }, class_name: "SubDiscipline" end diff --git a/app/models/sub_discipline.rb b/app/models/sub_discipline.rb index 453cf6071..2f4b612a3 100644 --- a/app/models/sub_discipline.rb +++ b/app/models/sub_discipline.rb @@ -1,4 +1,8 @@ class SubDiscipline < ApplicationRecord belongs_to :discipline has_many :tag_disciplines, dependent: :destroy + + has_many :shixun_tag_disciplines, -> { where("shixun = 1") }, class_name: "TagDiscipline" + has_many :subject_tag_disciplines, -> { where("subject = 1") }, class_name: "TagDiscipline" + has_many :question_tag_disciplines, -> { where("question = 1") }, class_name: "TagDiscipline" end diff --git a/app/views/disciplines/index.json.jbuilder b/app/views/disciplines/index.json.jbuilder new file mode 100644 index 000000000..df33b2e66 --- /dev/null +++ b/app/views/disciplines/index.json.jbuilder @@ -0,0 +1,35 @@ +case params[:source] +when 'subject' + disciplines = Discipline.where(subject: 1).includes(subject_sub_disciplines: :subject_tag_disciplines) + json.disciplines disciplines do |dis| + json.(dis, :id, :name) + json.sub_disciplines dis.subject_sub_disciplines do |sub| + json.(sub, :id, :name) + json.tag_disciplines sub.subject_tag_disciplines do |tag| + json.(tag, :id, :name) + end + end + end +when 'shixun' + disciplines = Discipline.where(shixun: 1).includes(shixun_sub_disciplines: :shixun_tag_disciplines) + json.disciplines disciplines do |dis| + json.(dis, :id, :name) + json.sub_disciplines dis.shixun_sub_disciplines do |sub| + json.(sub, :id, :name) + json.tag_disciplines sub.shixun_tag_disciplines do |tag| + json.(tag, :id, :name) + end + end + end +when 'question' + disciplines = Discipline.where(question: 1).includes(question_sub_disciplines: :question_tag_disciplines) + json.disciplines disciplines do |dis| + json.(dis, :id, :name) + json.sub_disciplines dis.question_sub_disciplines do |sub| + json.(sub, :id, :name) + json.tag_disciplines sub.question_tag_disciplines do |tag| + json.(tag, :id, :name) + end + end + end +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 46c8e9511..9a893f3b9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -54,6 +54,8 @@ Rails.application.routes.draw do end end + resources :disciplines, only: [:index] + resources :item_banks do member do post :set_public diff --git a/db/migrate/20191226023559_migrate_disciplines_default.rb b/db/migrate/20191226023559_migrate_disciplines_default.rb new file mode 100644 index 000000000..6bdbb894f --- /dev/null +++ b/db/migrate/20191226023559_migrate_disciplines_default.rb @@ -0,0 +1,15 @@ +class MigrateDisciplinesDefault < ActiveRecord::Migration[5.2] + def change + change_column_default :disciplines, :subject, from: nil, to: 1 + change_column_default :disciplines, :shixun, from: nil, to: 1 + change_column_default :disciplines, :question, from: nil, to: 1 + + change_column_default :sub_disciplines, :subject, from: nil, to: 1 + change_column_default :sub_disciplines, :shixun, from: nil, to: 1 + change_column_default :sub_disciplines, :question, from: nil, to: 1 + + change_column_default :tag_disciplines, :subject, from: nil, to: 1 + change_column_default :tag_disciplines, :shixun, from: nil, to: 1 + change_column_default :tag_disciplines, :question, from: nil, to: 1 + end +end