2013-08-01 2 views
0

내 프로젝트에는 선수 모델 (User 부모 모델을 상속받는 모델)과 has_many : coach_contacts가 있습니다. CoachContact 모델에서는 각 선수에 대해 sport_id에 대한 contact_type 속성의 고유성을 검증해야합니다.중첩 범위를 사용하는 방법은 무엇입니까?

는 예를 들어, 선수가 가질 수있는 코치 연락처의 최대 수는 (다른 스포츠를 무제한으로 존재 가정) 제한이 있지만 선수들이 스포츠의 각 당 을 가질 수 코치 연락처의 최대 수는 2입니다 . 뿐만 아니라 다른 유형의 것이어야합니다. 코치 연락처에는 "스쿨 코치"와 "클럽 코치"의 두 가지 유형이 있으며,이 코치 연락처를 소유 한 선수에게는 동일한 스포츠 내에 두 가지가있을 수 없습니다. 그래서 여기에 코치에게 연락 모델입니다 :

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 

코치 연락처 모델에서 어떻게 확인해야합니까?

감사합니다.

답변

2

할 수 있습니다 범위가 지정된 고유성 검증 사용 :

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

이는 athlete_id 당 당 하나를 허용하지 않을를? – trevorhinesley

+1

이것은 유효하지 않아야합니다 : contact_type, unique : {scope : [: athlete_id, : sport_id]}' – meagar

+0

@ meagar, 네가 맞다고 생각해. – bgates

관련 문제