class CompletionsController < ApplicationController before_action :set_contest before_action :set_data, only: %i[ create edit new update ] before_action :set_completion, only: %i[ destroy edit update ] def edit @title = "Edit completion" end def new @completion = Completion.new if params[:contestant_id] @completion.contestant_id = params[:contestant_id] end @title = "New completion" end def create @completion = Completion.new(completion_params) @completion.contest_id = @contest.id if @completion.save redirect_to contest_path(@contest) else logger = Logger.new(STDOUT) logger.info(@completion.errors) @title = "New completion" render :new, status: :unprocessable_entity end end def update if params[:contestant_id] @completion.contestant_id = params[:contestant_id] end if @completion.update(completion_params) redirect_to @contest else @title = "Edit completion" render :edit, status: :unprocessable_entity end end def destroy @completion.destroy if params[:contestant_id] redirect_to contest_contestant_path(@contest, params[:contestant_id]) else redirect_to contest_path(@contest) end end private def set_contest @contest = Contest.find(params[:contest_id]) end def set_data @contestants = @contest.contestants @puzzles = @contest.puzzles end def set_completion @completion = Completion.find(params[:id]) end def completion_params params.expect(completion: [ :time_seconds, :contestant_id, :puzzle_id ]) end end