forked from jasder/forgeplus
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
|