From 9cffe73b9788701365d9781c67549bdc16597ff4 Mon Sep 17 00:00:00 2001 From: Aliyan Ali Date: Sat, 4 Jan 2025 16:20:54 +0500 Subject: [PATCH 1/2] add Validations --- app/models/course.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/models/course.rb b/app/models/course.rb index 02e50ddfe4..9b2912fde5 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -60,6 +60,9 @@ class Course < ApplicationRecord ###################### # Users for a course # ###################### + # Validations + validates :slug, presence: true, uniqueness: { message: "Slug must be unique. Another course with this slug already exists." } + has_many :courses_users, class_name: 'CoursesUsers', dependent: :destroy has_many :users, -> { distinct }, through: :courses_users has_many :students, -> { where('courses_users.role = 0') }, From d8f1fed3899f3175b09c1ae0760a27131d655bce Mon Sep 17 00:00:00 2001 From: Aliyan Ali Date: Sat, 4 Jan 2025 16:22:31 +0500 Subject: [PATCH 2/2] Update the def update to handle errors gracefully --- app/controllers/courses_controller.rb | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 49cbcf7ad5..469d21b11f 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -44,18 +44,25 @@ def update validate handle_course_announcement(@course.instructors.first) slug_from_params if should_set_slug? - @course.update update_params - update_courses_wikis - update_course_wiki_namespaces - update_flags - ensure_passcode_set - UpdateCourseWorker.schedule_edits(course: @course, editing_user: current_user) - render json: { course: @course } + + if @course.update(update_params) + update_courses_wikis + update_course_wiki_namespaces + update_flags + ensure_passcode_set + UpdateCourseWorker.schedule_edits(course: @course, editing_user: current_user) + render json: { course: @course } + else + # If update fails, check for validation errors (e.g., duplicate slug) + render json: { errors: @course.errors.full_messages }, + status: :unprocessable_entity + end rescue Wiki::InvalidWikiError => e message = I18n.t('courses.error.invalid_wiki', domain: e.domain) render json: { errors: e, message: }, status: :not_found end + def destroy validate