2014-04-19 2 views
0

여러 개체의 특성을 업데이트하는 방법이 있습니까? 팀의 승리와 손실이 업데이트 될 때마다 사용자의 승패를 업데이트하려고합니다.여러 개체의 특성을 한 번에 업데이트

세 모델이 서로 연결되어 있습니다.

플레이어가 팀에 속합니다. 사용자가 팀에 가입하면 이름과 역할이있는 플레이어가 생성되도록 노력하고 있습니다.

class Player < ActiveRecord::Base 
    belongs_to :team 
end 

팀에 많은 플레이어가 있습니다. 팀 이름 보유 : 문자열 승리 : 정수 손실 : 정수.

class Team < ActiveRecord::Base 
    has_many :players, dependent: :destroy 
end 

사용자는 플레이어를 통해 많은 팀을 보유하고 있습니다. 따라서 사용자는 그들이 가입하는 팀의 선수입니다. 새 플레이어를 만들 때 사용자는 플레이어와 이름을 연결합니다. 사용자 이름을 길게 : 문자열 이메일 : 문자열 승리 : 정수 손실 : 정수를 나는 팀의 승리와 손실도 그 승 손실로 업데이트됩니다 플레이어를 업데이트 할 때

class User < ActiveRecord::Base 
    has_many :players, dependent: :destroy 
    has_many :teams, through: :players 
end 

그래서 내가 만들고 싶어이 시점에서 너무입니다. 어떻게 해결할 수 있을까요? 인스턴스 변수에 모든 팀의 사용자를로드하려고 시도했지만 플레이어가 두 명 이상이므로 여기에서 승을 업데이트 할 수 없습니다.

답변

0

나는 나머지 신청서를 모르지만 귀하의 질문에 따라 다른 모델을 제안하는 것이 좋습니다 Matches. 그것을 Teamhas_many을 통해 연결할 수 있습니다. 그런 다음 팀에 원/분실 경기를 추가하고 모델을 설정하여

과 같은 검색어를 만들 수 있습니다. 모델은 다음과 같아야합니다. 여러 팀이 동일한 일치 항목을 재생하고 중복없이 결과를 저장하려는 경우 (일치하는 항목에 team1_id, team2_id과 같은 여러 개의 외래 키가있을 수 있음) 더 잘 설정할 수 있습니다. 일치에 추가

team.matches.won.count 

:

class Team < ActiveRecord::Base 
    has_many :players, dependent: :destroy 
    has_many :matches 
end 

class Match < ActiveRecord::Base 
    belongs_to :team 

    def self.won 
    where(won: true) 
    end 

    def self.lost 
    where(won: false) 
    end 
end 

지금이 쿼리가 작동합니다 : 당신은에 또한 그린 일치를 원하는 경우 또는, 당신은 단순히 하나 개의 속성 won을 포함 요구하는 것을 들어 등 점수를 저장 팀은 단순해야합니다 :

team.matches.create(won: true) 
+0

팀에 원/분실 매치를 추가하는 방법은 무엇입니까? – linogomez

+0

@linogomez 내 대답에 대한 추가 정보 –

관련 문제