在我的项目中,我有一个运动员模型(继承用户父模型),并且它有has_many:coach_contacts。在CoachContact模型中,我需要它来验证每个运动员的每个sport_id的contact_type属性的唯一性。
例如,运动员可以拥有的最大教练联系人数量是无限的(假设存在无限数量的不同运动),但运动员每次运动可以的最大教练联系人数量是两个即可。不仅如此,它们必须是不同类型的。有两种类型的教练联系人,“学校教练”和“俱乐部教练”,并且拥有这些coach_contacts的运动员在同一项运动中不能有两个。所以这是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模型中验证这一点?
谢谢!
答案 0 :(得分:2)
您可以使用范围唯一性验证器:
validates :contact_type, uniqueness: { scope: [:athlete_id, :sport_id] }