У меня есть несколько моделей:
- Пользователь = обычный пользовательский класс (не принадлежит ни к чему)
- Вызов = любой вид соревнования (не принадлежит ни к чему)
- Team = список пользователей (принадлежит Challenge)
- Coach = имя и роль тренера, который может быть разделен между несколькими командами, но существует только для данного Challenge (принадлежит Challenge)
- TeamCoach = ассоциация между командой и тренером (принадлежит команде и тренеру)
Я хочу убедиться, что TeamCoach с командой и тренером невозможенкоторые не относятся к одному и тому же вызову.
Моя текущая (рабочая) реализация выглядит следующим образом:
class TeamCoach < ActiveRecord::Base
attr_readonly :coach_id, :team_id
belongs_to :coach
belongs_to :team
validates :coach_id, :presence => true,
:uniqueness => { :scope => :team_id }
class SameChallengeValidator < ActiveModel::Validator
def validate(team_coach)
if team_coach.team.challenge_id != team_coach.coach.challenge_id
team_coach.errors[:base] << "The team and coach do not belong to the same challenge."
end
end
end
validates_with SameChallengeValidator
end
Существует ли более короткий и более элегантный способ проверки SameChallengeValidator?
Спасибо,