1

I have a model that is something similar to the following

class Lecture
  include Mongoid::Document
  belongs_to :orgnization
  belongs_to :schedule
  has_one    :lecturer

  validates :lecturer, presence: true, uniqueness: { scope: [:orgnization, :schedule] }
end

this works perfectly fine validating that the lecturer is unique per schedule per orgnization...

the problem rises when I try to make the lecture has_many :lecturers

class Lecture
  include Mongoid::Document
  belongs_to :orgnization
  belongs_to :schedule
  has_many   :lecturers

  # the following validation doesn't work
  validates :lecturers, presence: true, uniqueness: { scope: [:orgnization, :schedule] }
end

how do I fix this so that it evaluates the uniqueness of the has_many the same way it evaluates the has_one relation

I'd like to have something like the following

class Lecture
  ...
  validate :lecturers_schedule
  def lecturers_schedule
    # Pseudo code
    lecturers.each do |lecturer|
      validates :lecturer, uniqueness: { scope: [:orgnization, :schedule] }
    end
  end
end

I've looked at this answer but it didn't work

Community
  • 1
  • 1
a14m
  • 7,808
  • 8
  • 50
  • 67

1 Answers1

1

the only solution that I could come up with is the following

  validate  :lecturers_schedule
  def lecturers_schedule
    lecturer.each do |lecturer|
      # if any of the lecturers has any lecture
      # in the same organization and in the same schedule
      # then return validation error
      if lecturer.lectures.where(organization: organization,
                                 schedule: schedule).count > 0
        self.errors[:lecturers] << "already taken"
      end
    end
  end

I don't consider this to be the best solution... so If anybody has a better solution please add it...

a14m
  • 7,808
  • 8
  • 50
  • 67