2013-06-03 3 views
1

에 방법을 위임 : 팀 여러 선수를 가질 수는 유효성 내가 세 가지 모델 다음 한 레일

class Team < ActiveRecord::Model 
    has_many :teams_players 
    has_many :players, :through => :teams_players 
end 

class TeamsPlayer < ActiveRecord::Model 
    belongs_to :team 
    belongs_to :player 

    delegate :position, :to => :player 
end 

class Player < ActiveRecord::Model 
    has_many :teams_players 
    has_many :teams, :through => :teams_players 

    # the database attribute 'position' exists on Player 
end 

하고, 플레이어는 여러 팀에 속할 수 있습니다. 그러나 팀은 위치가 '키커'인 플레이어를 한 명만 가질 수 있습니다.

어떻게이 고유 한 유효성 검사를 만들 수 있습니까?

validates :position, :uniqueness => { :scope => {:team_id} } 

그러나 검증하는 동안

는 레일은 TeamsPlayer 데이터베이스 테이블에 type 열을 확인하는 쿼리를 실행합니다

나는이 같은 TeamsPlayer에 유효성 검사를 추가했습니다. 대신 위임 된 메서드임을 확인하고 대신 Player 데이터베이스 테이블에서 확인합니다.

답변

0

이되어 있지 Player에 대한 검증, 그것은 Team

+0

왜'Team'에있을 것이 아니라'TeamsPlayer'에 custom validation입니까? 내가 '팀'에 올린다면, 내가 원하는만큼 같은 위치에 많은 선수를 추가 할 수 없을까? 나는 단지'TeamsPlayer' 객체를 생성하기위한 폼을 노출합니다. – Brian

+0

X와 같은 제약 조건을 검증 할 때 하나의 Y 만 가질 수 있다면, X에 검증을 넣으므로'Team'에 유효성 확인을 두어'has' 제로 또는 하나의 키커. 나는 당신이'TeamsPlayer'에 대한 검증을 할 수 있다고 생각합니다. 결코 시도하지 않았습니다. –

+0

저는 자신의 컨트롤러를 사용하여 조인 모델을 생성/편집/파괴하고 있습니다. 따라서 X에서 유효성 검사를 수행 할 수 있다고 생각지 않습니다. X를 수정하려고 시도했을 때만 실행될 것이라고 생각합니다. – Brian

관련 문제