Mark Kerr Mark Kerr - 6 months ago 9
Ruby Question

Rails: Validating an array of ids

Application



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

end





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

end





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: [])
end


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

Answer

For the rails side, I would do on the CourseApplication

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

For your reference this can be found at: http://guides.rubyonrails.org/active_record_validations.html#uniqueness

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.