Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun
commit
d62f528c06
@ -0,0 +1,2 @@
|
||||
// Place all the behaviors and hooks related to the matching controller here.
|
||||
// All this logic will automatically be available in application.js.
|
@ -0,0 +1,3 @@
|
||||
// Place all the styles related to the course_stages controller here.
|
||||
// They will automatically be included in application.css.
|
||||
// You can use Sass (SCSS) here: http://sass-lang.com/
|
@ -0,0 +1,105 @@
|
||||
class CourseStagesController < ApplicationController
|
||||
before_action :require_login
|
||||
before_action :find_course, only: [:create]
|
||||
before_action :find_course_stage, only: [:update, :destroy, :edit, :up_position, :down_position]
|
||||
before_action :user_course_identity, :teacher_allowed
|
||||
|
||||
def create
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
@stage = CourseStage.new(stage_params)
|
||||
@stage.course_id = @course.id
|
||||
@stage.position = @course.course_stages.count + 1
|
||||
@stage.save!
|
||||
unless params[:shixun_id].blank?
|
||||
shixuns = Shixun.where(id: params[:shixun_id]).order("field(id, #{params[:shixun_id].join(",")})")
|
||||
shixuns.each do |shixun|
|
||||
CourseStageShixun.create!(course_stage_id: @stage.id, course_id: @course.id, shixun_id: shixun.id, position: @stage.course_stage_shixuns.count + 1)
|
||||
end
|
||||
end
|
||||
normal_status("创建成功")
|
||||
rescue Exception => e
|
||||
uid_logger_error(e.message)
|
||||
tip_exception(e.message)
|
||||
raise ActiveRecord::Rollback
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
|
||||
end
|
||||
|
||||
def update
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
@stage.update_attributes!(stage_params)
|
||||
@stage.course_stage_shixuns.destroy_all
|
||||
unless params[:shixun_id].blank?
|
||||
params[:shixun_id].each do |shixun_id|
|
||||
shixun = Shixun.where(id: shixun_id).first
|
||||
@stage.course_stage_shixuns.create!(course_id: @course.id, shixun_id: shixun.id, position: @stage.course_stage_shixuns.count + 1) if shixun.present?
|
||||
end
|
||||
end
|
||||
normal_status("更新成功")
|
||||
rescue Exception => e
|
||||
uid_logger_error(e.message)
|
||||
tip_exception(e.message)
|
||||
raise ActiveRecord::Rollback
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
ActiveRecord::Base.transaction do
|
||||
@course.course_stages.where("position > ?", @stage.position).update_all("position = position - 1")
|
||||
@stage.destroy!
|
||||
normal_status("删除成功")
|
||||
end
|
||||
end
|
||||
|
||||
def up_position
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
position = @stage.position
|
||||
tip_exception("第一章不能向上移动") if @stage.position == 1
|
||||
pre_stage = @course.course_stages.where(position: position - 1).first
|
||||
pre_stage.update_attributes(position: position)
|
||||
@stage.update_attributes(position: position - 1)
|
||||
normal_status("更新成功")
|
||||
rescue Exception => e
|
||||
uid_logger("stage up failed: #{e.message}")
|
||||
raise ActiveRecord::Rollback
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def down_position
|
||||
ActiveRecord::Base.transaction do
|
||||
begin
|
||||
position = @stage.position
|
||||
rails "最后一章不能向下移动" if @stage.position == @course.course_stages.count
|
||||
next_stage = @course.course_stages.where(position: position + 1).first
|
||||
next_stage.update_attributes(position: position)
|
||||
@stage.update_attributes(position: position + 1)
|
||||
normal_status("更新成功")
|
||||
rescue Exception => e
|
||||
uid_logger("stage up failed: #{e.message}")
|
||||
raise ActiveRecord::Rollback
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_course_stage
|
||||
@stage = CourseStage.find_by!(id: params[:id])
|
||||
@course = @stage.course
|
||||
end
|
||||
|
||||
def stage_params
|
||||
tip_exception("章节名称不能为空") if params[:name].blank?
|
||||
params.permit(:name, :description)
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,2 @@
|
||||
module CourseStagesHelper
|
||||
end
|
@ -0,0 +1,9 @@
|
||||
class CourseStage < ApplicationRecord
|
||||
belongs_to :course
|
||||
|
||||
has_many :course_stage_shixuns, -> { order("course_stage_shixuns.position ASC") }, dependent: :destroy
|
||||
has_many :shixuns, :through => :course_stage_shixuns
|
||||
|
||||
validates :name, length: { maximum: 60 }
|
||||
validates :description, length: { maximum: 300 }
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
class CourseStageShixun < ApplicationRecord
|
||||
belongs_to :course
|
||||
belongs_to :course_stage, counter_cache: :shixuns_count
|
||||
belongs_to :shixun
|
||||
end
|
@ -0,0 +1,11 @@
|
||||
json.stage_id @stage.id
|
||||
json.stage_name @stage.name
|
||||
json.stage_description @stage.description
|
||||
json.delete_path "/course_stages/#{@stage.id}"
|
||||
json.shixuns_list do
|
||||
json.array! @stage.shixuns.each do |shixun|
|
||||
json.shixun_identifier shixun.identifier
|
||||
json.shixun_name shixun.name
|
||||
json.shixun_id shixun.id
|
||||
end
|
||||
end
|
@ -0,0 +1,13 @@
|
||||
class CreateCourseStages < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :course_stages do |t|
|
||||
t.references :course, index: true
|
||||
t.string :name
|
||||
t.text :description
|
||||
t.integer :position
|
||||
t.integer :shixuns_count
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,12 @@
|
||||
class CreateCourseStageShixuns < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :course_stage_shixuns do |t|
|
||||
t.references :course, index: true
|
||||
t.references :course_stage, index: true
|
||||
t.references :shixun, index: true
|
||||
t.integer :position
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,14 @@
|
||||
class MigrateCourseStages < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
Course.where(excellent: 1).each do |course|
|
||||
if course.subject
|
||||
course.subject.stages.each do |stage|
|
||||
new_stage = CourseStage.create!(course_id: course.id, name: stage.name, description: stage.description, position: stage.position)
|
||||
stage.stage_shixuns.each do |stage_shixun|
|
||||
CourseStageShixun.create!(course_id: course.id, course_stage_id: new_stage.id, shixun_id: stage_shixun.shixun_id, position: stage_shixun.position)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe CourseStagesController, type: :controller do
|
||||
|
||||
end
|
@ -0,0 +1,15 @@
|
||||
require 'rails_helper'
|
||||
|
||||
# Specs in this file have access to a helper object that includes
|
||||
# the CourseStagesHelper. For example:
|
||||
#
|
||||
# describe CourseStagesHelper do
|
||||
# describe "string concat" do
|
||||
# it "concats two strings with spaces" do
|
||||
# expect(helper.concat_strings("this","that")).to eq("this that")
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
RSpec.describe CourseStagesHelper, type: :helper do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe CourseStageShixun, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe CourseStage, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
Loading…
Reference in new issue