0

在我的项目中,我有一个 Athlete 模型(继承了 User 父模型),它 has_many :coach_contacts。在 CoachContact 模型中,我需要它来验证每个运动员的每个运动 ID 的 contact_type 属性的唯一性。

例如,运动员可以拥有的教练联系人的最大数量是无限的(假设存在无限数量的不同运动),但运动员在每项运动中可以拥有的教练联系人的最大数量是 2。不仅如此,它们还必须是不同的类型。教练联系人有两种类型,“学校教练”和“俱乐部教练”,对于拥有这些教练联系人的运动员来说,同一运动中不能有两个。所以这里是 Coach Contact 模型:

class CoachContact < ActiveRecord::Base
  belongs_to :athlete

  validates_presence_of :name, :email, :sport_id, :athlete_id, :contact_type

end

这是一个可能的场景的示例视觉效果应该如何工作:

Athlete
    ->Football
        1. School coach
        2. Club coach
    ->Baseball
        1. School coach
    ->Basketball
        2. Club coach

但是,它不可能是这样的:

Athlete
    ->Football
        1. Club coach
        2. Club coach
    ->Baseball
        1. School coach
    ->Basketball
        2. Club coach

那么我应该如何在 Coach Contact 模型中验证这一点?

谢谢!

4

1 回答 1

2

您可以使用范围唯一性验证器:

validates :contact_type, uniqueness: { scope: [:athlete_id, :sport_id] }
于 2013-08-01T14:51:25.950 回答