2012-02-05 2 views
1

그래서 소프트볼 팀과 팀원이 있습니다. 팀에 특정 수의 플레이어 만 추가 할 수 있도록 (최대 3 개) 그렇게하고 싶습니다.모델 유효성 검사가 인식되지 않음 - 팀에있는 최대 플레이어 수

has_many :players 
validates :team, :length => {:maximum => 3} 

응용 실패하지 않지만이 중 3 플레이어의 한계를 인식하지 못합니다 : 내 team.rb 파일에서, 나는있다.

모든 입력 사항을 매우 높이 평가할 것입니다.

+0

팀이란 무엇입니까? 그것은 협회입니까? 배열? 귀하의 질문에 데이터 모델을 추가하십시오. –

+0

그럼 협회가 아닌가요 ?? 나는 이것에 아주 새롭다. Havent는 모든 배열을 만들었고 레일 비계를 사용하여이 응용 프로그램을 만들었습니다. 그래서 플레이어 이름, 저지 번호 및 그들이 원하는 팀 (collection_select 사용)을 입력하여 플레이어를 추가합니다. player.rb 모델 파일은 belongs_to : team을 사용합니다. – DnfD

답변

1

더 쉬운 것이 있는지 확실하지 않습니다. 그것을하는 방법. 사용자 정의 모델 검증이이 player.rb에

validate :maxplayers 

def maxplayers 
    unless team.players.count < 3 
    errors.add(:base, "You have reached team capacity") 
    end 
end 

참고했습니다, 그리고 어떤 이유로 errors.add_to_base은 작동하지 않을 것입니다. 유효성이 아니라 유효성에주의하십시오.

0

당신이하려고하는 것 (내가 올바르게한다면!)은 3 명 이상의 선수가 팀과 연관되어있는 것을 피하는 것이지만, 당신이 쓴 것이 아닙니다. 예를 들어, 당신은 이름 필드 플레이어 모델이있는 경우이 방법을 최대 이름 길이를 강제 할 수 있도록

길이 검증

는 필드 길이를 확인 :

# In the Player model 
validates :name, :length => {:maximum => 30} 

싶은 것은 어렵습니다, 당신 모든 팀의 DB에 최대 3 명의 플레이어가 있는지 확인해야합니다. 아마 모델 후크를 사용해야합니다. (나도 초보자입니다!)

+0

그게 최대 NAME 길이에 불과합니다. 위의 (방금 시도한) 작업을 수행하면 최대 길이는 30 자입니다. 플레이어 이름의 길이에 대해서는 전혀 걱정하지 않습니다. 내 말은, 루비의 길이가 네 머리를 감싸기가 어렵다는거야. 나는 시도했다 : length => {: size => 3}하지만 작동하지 않는다. – DnfD

+0

당신이 선수 이름에 대해 걱정하지 않았다는 것을 알고 있습니다. 그것은 길이 유효성 검사가 작동하는 방식에 대한 설명 일뿐입니다 : 그것은 현재 협회의 숫자가 아닌 하나의 필드를 나타냅니다 [1]. app/models/team.rb 파일에 작성한 코드가 맞습니까? 그리고 당신은 app/models/player.rb에서도 Player 모델을 가지고 있습니까? [1] : http://guides.rubyonrails.org/active_record_validations_callbacks.html#length –

+0

그래도 플레이어 모델이 있습니다. belongs_to : team :) 그래서 내가 사용할 diff 검증을 찾고 있는데요, 전 세계에서 무엇을 쓸까요? – DnfD

관련 문제