84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| class Admins::SubDisciplinesController < Admins::BaseController
 | |
| 
 | |
|   def index
 | |
|     @discipline = current_discipline
 | |
|     @sub_disciplines = current_discipline.sub_disciplines
 | |
|   end
 | |
| 
 | |
|   def create
 | |
|     name = params[:name].to_s.strip
 | |
|     return render_error('名称不能为空') if name.blank?
 | |
|     return render_error('名称重复') if current_discipline.sub_disciplines.where(name: name).exists?
 | |
|     SubDiscipline.create!(name: name, discipline_id: current_discipline.id, position: current_discipline.sub_disciplines.pluck(:position).max + 1)
 | |
|     render_ok
 | |
|   end
 | |
| 
 | |
|   def edit
 | |
|     @sub_discipline = current_sub_discipline
 | |
|   end
 | |
| 
 | |
|   def update
 | |
|     begin
 | |
|       if params[:sub_discipline] && params[:sub_discipline][:name]
 | |
|         name = params[:sub_discipline][:name].to_s.strip
 | |
|         current_sub_discipline.update_attributes!(name: name)
 | |
|       else
 | |
|         ActiveRecord::Base.transaction do
 | |
|           current_sub_discipline.update_attributes!(setting_params)
 | |
|           current_sub_discipline.tag_disciplines.each do |tag|
 | |
|             tag.update_attributes!(setting_params)
 | |
|           end
 | |
|         end
 | |
|       end
 | |
|     rescue Exception => e
 | |
|       @message = e.message
 | |
|     end
 | |
|     @sub_disciplines = current_sub_discipline.discipline&.sub_disciplines
 | |
|   end
 | |
| 
 | |
|   def destroy
 | |
|     @sub_discipline_id = params[:id]
 | |
|     ActiveRecord::Base.transaction do
 | |
|       discipline = current_sub_discipline.discipline
 | |
|       discipline.sub_disciplines.where("position > #{current_sub_discipline.position}").update_all("position=position-1")
 | |
|       current_sub_discipline.destroy!
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def adjust_position
 | |
|     discipline = current_sub_discipline.discipline
 | |
|     max_position = discipline.sub_disciplines.pluck(:position).max
 | |
|     opr = params[:opr] || "down"
 | |
|     if (params[:opr] == "up" && current_sub_discipline.position == 1) || (params[:opr] == "down" && current_sub_discipline.position == max_position)
 | |
|       @message = "超出范围"
 | |
|     else
 | |
|       ActiveRecord::Base.transaction do
 | |
|         if opr == "up"
 | |
|           discipline.sub_disciplines.find_by("position = #{current_sub_discipline.position - 1}")&.update!(position: current_sub_discipline.position)
 | |
|           current_sub_discipline.update!(position: current_sub_discipline.position - 1)
 | |
|         else
 | |
|           discipline.sub_disciplines.find_by("position = #{current_sub_discipline.position + 1}")&.update!(position: current_sub_discipline.position)
 | |
|           current_sub_discipline.update!(position: current_sub_discipline.position + 1)
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|     @sub_disciplines = discipline&.sub_disciplines
 | |
|   rescue Exception => e
 | |
|     @message = e.message
 | |
|   end
 | |
| 
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def current_sub_discipline
 | |
|     @_current_sub_discipline = SubDiscipline.find params[:id]
 | |
|   end
 | |
| 
 | |
|   def current_discipline
 | |
|     @_current_discipline = Discipline.find params[:discipline_id]
 | |
|   end
 | |
| 
 | |
|   def setting_params
 | |
|     params.permit(:shixun, :subject, :question)
 | |
|   end
 | |
| end |