class BoardsController < ApplicationController before_action :require_login before_action :find_course, only: [:create] before_action :set_board, except: [:create] before_action :teacher_allowed def index @boards = @course.boards.includes(messages: [:last_reply, :author]); end def show end def new end def create ActiveRecord::Base.transaction do begin board = @course.course_board new_board = Board.new(board_params) new_board.course_id = @course.id new_board.project_id = -1 new_board.parent_id = board.try(:id) new_board.position = board.children.count + 1 new_board.save! normal_status(0, "添加成功") rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end # 子目录的拖动 def move_category tip_exception("移动失败") if params[:position].blank? unless params[:position].to_i == @board.position course_board = @course.course_board if params[:position].to_i < @board.position course_board.children.where("position < #{@board.position} and position >= ?", params[:position]).update_all("position = position + 1") else course_board.children.where("position > #{@board.position} and position <= ?", params[:position]).update_all("position = position - 1") end @board.update_attributes(position: params[:position]) normal_status(0, "移动成功") else normal_status(-1, "位置没有变化") end end def destroy ActiveRecord::Base.transaction do begin @course_board = @course.course_board @course_board.children.where("position > #{@board.position}").update_all("position = position - 1") @board.messages.update_all(board_id: @course_board.id) @board.destroy rescue Exception => e uid_logger_error(e.message) tip_exception("子目录删除失败") raise ActiveRecord::Rollback end end end def update @board.update_attributes(board_params) normal_status(0, "更新成功") end private def set_board @board = Board.find_by!(id: params[:id]) @course = @board.course end def board_params tip_exception("子目录名称不能为空") if params[:name].blank? tip_exception("已存在同名讨论区") if @course.boards.exists?(name: params[:name].strip) params.require(:board).permit(:name) end end