如何使用嵌套范围?

时间:2013-08-01 14:44:33

标签: ruby-on-rails

在我的项目中,我有一个运动员模型(继承用户父模型),并且它有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模型中验证这一点?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

validates :contact_type, uniqueness: { scope: [:athlete_id, :sport_id] }