Mark Kerr Mark Kerr - 1 year ago 70
Ruby Question

Rails: Validating an array of ids


I am working on a college admissions system where a student can make an application to up to 5 courses. The way I have designed this is to have an Application model and a CourseApplication model. An application can consist of many course_applications:

class Application < ActiveRecord::Base

# Assosciations
belongs_to :user
has_many :course_applications, dependent: :destroy
has_many :courses, through: :course_applications
has_one :reference

# Validations
validates :course_applications, presence: true


Course Application

class CourseApplication < ActiveRecord::Base

# Intersection entity between course and application.
# Represents an application to a particular course, has an optional offer

# Associations
belongs_to :application
belongs_to :course
has_one :offer, dependent: :destroy


I want to make sure that a student cannot apply to the same course twice. I have already done some research but have had no success. This is the UI for a student making an application:

Screenshot of application form

When a course is selected, the course id is added to an array of course ids:

def application_params
params.require(:application).permit(:user, course_ids: [])

Right now a student can select the same course twice, I want to prevent them from doing this. Any help is much appreciated.

Answer Source

For the rails side, I would do on the CourseApplication

validates :course, uniqueness: { scope: :application }

For your reference this can be found at:

Also suggest on the database side to make a migration

add_index :course_applications, [:course, :application], :unique => true

For the validating on the form you will have to write javascript to make sure two things are selected, this will just return an error when someone tries to do it.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download