2013-08-01 3 views
0

В моем проекте у меня есть модель Athlete (наследует родительскую модель User), и она has_many: coach_contacts. В модели CoachContact мне нужно это, чтобы подтвердить уникальность своего атрибута contact_type, для sport_id, для каждого спортсмена.Как использовать вложенную область?

Например, максимальное количество автобусов Контактов спортсмен может иметь неограниченно (при условии, неограниченное количество различных видов спорта существовало), но максимальное количество автобусов Контактов спортсмен может иметь за каждого из своих видов спорта два , Не только это, но они должны быть разных типов. Есть два типа Coach Contacts, «школьный тренер» и «клубный тренер», и не может быть двух из них в одном и том же виде спорта для спортсмена, который владеет этими coach_contacts. Так вот тренер Контактная модель:

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?

Спасибо!

ответ

2

Вы можете использовал контекстную уникальность валидатора:

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

Не это собирается разрешить только один на на athlete_id? – trevorhinesley

+1

Должно ли это быть 'validates: contact_type, uniqueiquity: {scope: [: athlete_id,: sport_id]}' – meagar

+0

@meagar, я думаю, что вы правы. – bgates

Смежные вопросы