2012-11-25 7 views
1

나는 Team 개체와 Game 개체를 가지고 있습니다.has_one 및 has_many

GameGames

가 어떻게 올바르게을 구성 할 수있는 여러의 승자가 될 수있는 Team Team 하나 승자가 가정된다? 나는 Mongoid 이것은 내가 지금까지 해낸 것입니다

... 사용하고

class Game 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    has_one :winner, :class_name=>Team 
end 

class Team 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    has_and_belongs_to_many :games_won, :class_name=>"Game", :inverse_of => :Game 
end 

답변

2

있도록 자체 클래스로 밖으로 승리를 추상화시키는 것을 고려하라 :

class Game 
    has_one :win 
end 

class Team 
    has_many :wins 
end 

class Win 
    belongs_to :game 
    belongs_to :team 
end 

이가 있습니다 더 논리적 인 구조는 코드를 더 간단하게 만들고 다른 이유로 인해 별도의 리소스로 wins로 작업하기를 원할 수도있는 상황에서 다른 이점이 있습니다.

+1

좋은 아이디어. 방금 이것을 시도했습니다. 결과가 승패로 변경되었습니다. 하지만 결과 : 클래스에 대한 정의되지 않은 메소드 'has_a'가 나타납니다. 대신 has_one이되어야합니까? – K2xL

+0

제 사과는 'has_one'이어야합니다. 나는 생각하지 않고 타이핑하고 있었다. :) –

+0

아무런 문제가 없다. 나는 이상한 물건을 얻는다. ""결과 게임에 (n) 게임을 추가 할 때, 몽고 이드는 설정할 외래 키를 결정할 수 없었다. 시도 된 키는 ' result_id '. " 이것은 내가 결과 = Result.new를 시도한 다음 result.game = Game.find (.... – K2xL