Проверка комбинации столбцов не в одной таблице - PullRequest
0 голосов
/ 25 октября 2018

В наличии 4 таблицы: Курс , Раздел , Зачисление , Студент .

  • Курс has_many Разделы
  • Разделы и студенты имеют общие отношения many_to_many, где Enrollment - это таблица присоединения

Я пытаюсь добавить проверку в Enrollment, чтобы студент не мог быть зачисленна несколько разделов одного курса.Я не могу понять, как реализовать эту проверку, потому что курс не имеет непосредственного отношения к зачислению.

Вот модели для дальнейшего разъяснения:

class Course < ActiveRecord::Base
  has_many :sections
end

class Section < ActiveRecord::Base
  belongs_to :course

  has_many :enrollments
  has_many :students, through :enrollments
end

class Enrollment < ActiveRecord::Base
  validate :noDuplicateCourses

  def noDuplicateCourses
    if #TRYING TO FIGURE OUT HOW TO EXPRESS THE LOGIC HERE
      errors.add(:student_id, 'Already enrolled in a different section of this course')
    end
  end

  belongs_to :section
  belongs_to :student
end

class Student < ActiveRecord::Base
  has_many :enrollments
  has_many :sections, through :enrollments
end

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Нечто подобное должно работать.Просто поместите свою логику вместо your_logic_here.

validate :multiple_enrollment

private
# Custom validator
def multiple_enrollment
  if your_logic_here
    errors.add(self.class.table_name, "Student is already enrolled in another section of this course.")
  end
end
0 голосов
/ 25 октября 2018

Вы можете просто сохранить course_id на Enrollment.Этот метод называется de-normalization , что означает, что у вас есть дублированный контент, которого вы пытаетесь избежать в реляционных базах данных.

...