2012-11-25 47 views
1

我有一個Team對象和一個Game對象。has_one and has_many

一個Game應該有一個贏家是一個Team 一個Team可以是多個的Games

我怎樣才能正確地構建這個贏家?我使用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

好主意。剛試過這個。將勝利改爲結果。但是我得到了Result:Class的未定義方法'has_a'。它應該是否是has_one? – K2xL

+0

我的道歉,應該是'has_one'。我在打字時沒有想到:) –

+0

沒問題,我得到一些奇怪的東西,雖然......「當添加一個(n)遊戲到結果#遊戲時,Mongoid無法確定要設置的反向外鍵,嘗試的鍵是' result_id」。」這是當我嘗試並做一個結果= Result.new,然後result.game = Game.find(.... – K2xL