class Competitions::CompetitionModulesController < Competitions::BaseController skip_before_action :require_login, only: [:index, :show] before_action :require_business, only: [:update] def index @modules = current_competition.unhidden_competition_modules.order(position: :asc) end def show @module = current_module end def update md = current_module.competition_module_md_content || current_module.build_competition_module_md_content md.name = params[:md_name] md.content = params[:md_content] ActiveRecord::Base.transaction do md.save! attachment_ids = Array.wrap(params[:attachment_ids]).map(&:to_i) old_attachment_ids = md.attachments.pluck(:id) destroy_ids = old_attachment_ids - attachment_ids md.attachments.where(id: destroy_ids).delete_all Attachment.where(id: attachment_ids - old_attachment_ids).update_all(container: md) end render_ok end private def current_module @_current_module ||= current_competition.unhidden_competition_modules.find(params[:id]) end end