多范围唯一性验证

mus*_*oom 7 activerecord ruby-on-rails

我想澄清多范围唯一性验证的行为.该文件说:

甚至是多个范围参数.例如,确保教师每学期只能按照特定班级的时间表进行一次.

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end
Run Code Online (Sandbox Code Playgroud)

我对此的理解是,我可以让一位老师在同一学期教授两门课,但不是同一节课,我可以让一位老师在不同的学期教授同一节课.它是否正确?所有3个字段必须匹配某些现有记录才能使验证失败?

有没有办法验证它,如果semester_id或class_id匹配,它会失败?

Mic*_*ley 9

我对此的理解是,我可以让一位老师在同一学期教授两门课,但不是同一节课,我可以让一位老师在不同的学期教授同一节课.它是否正确?所有3个字段必须匹配某些现有记录才能使验证失败?

是的,这是正确的.关于它"因为每个独特的价值scope,这个领域只能出现一次." 何时scope是数组,"范围的唯一值"是字段值的组合.

有没有办法验证它,如果semester_id或class_id匹配,它会失败?

所以老师一个学期不应该教两次,也不应该教同一个班,即使是在不同的学期?这似乎不对,但你可以通过对每个问题的验证来做到这一点:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => :semester_id
  validates_uniqueness_of :teacher_id, :scope => :class_id
end
Run Code Online (Sandbox Code Playgroud)