多范围唯一性验证



我想澄清多范围唯一性验证的行为。文档说:

甚至多个范围参数。例如,确保 教师每学期只能按特定时间表上一次 .class。

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end
我对此的理解是,我可以让一个老师在同一学期教

两个班,但不是同一个班级,我可以让一个老师在不同的学期教同一个班。 这是对的吗?所有 3 个字段都必须与某些现有记录匹配才能使验证失败?

有没有办法验证它,以便在semester_id或class_id匹配时失败?

我对此的理解是,我可以让一个老师在同一学期教

两个班,但不是同一个班级,我可以让一个老师在不同的学期教同一个班。这是对的吗?所有 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

我刚刚了解了唯一性验证如何与范围一起工作,我想与大家分享。

假设您在组织中有多个部门,并且任何员工也可以同时属于两个或多个部门。为了确保员工的电子邮件 ID 在每个部门中都是唯一的,我们使用范围。

通过这样做,我们可以确保没有两个具有相同电子邮件地址的员工在同一部门工作。此外,我们还可以找到特定员工工作的所有部门。

简单来说,使用范围进行唯一性验证适用于两个属性中的几个(在我们的例子中是电子邮件、部门)。

最新更新