2

在連接體育賽事兩隊,起初這似乎是有道理的:有多個ActiveRecord`belongs_to`指向同一個類可以嗎?

events 
    - id:integer 
    - integer:home_team_id 
    - integer:away_team_id 

teams 
    - integer:id 
    - string:name 

但是我對我將如何鏈接起來的活動記錄模式的困擾:

class Event 
    belongs_to :home_team, :class_name => 'Team', :foreign_key => "home_team_id" 
    belongs_to :away_team, :class_name => 'Team', :foreign_key => "away_team_id" 
end 

這是最好的解決方案嗎?

在對similar question的回答中,我指出了單表繼承,後來發現了多態關聯。這兩者似乎都不適合這個協會。也許我在看這個錯誤,但是我認爲沒有必要將一個團隊劃分爲主隊和客隊,因爲區別只在於比賽的場地。如果我確實使用單表繼承,我不希望每個團隊都屬於某個事件,那麼這個工作會如何?

# app/models/event.rb 
class Event < ActiveRecord::Base 
    belongs_to :home_team 
    belongs_to :away_team 
end 

# app/models/team.rb 
class Team < ActiveRecord::Base 
    has_many :teams 
end 

# app/models/home_team.rb 
class HomeTeam < Team 

end 

# app/models/away_team.rb 
class AwayTeam < Team 

end 

這似乎只是太多的工作,我想實現。

我還想過關於has_many通過關聯,但似乎兩個,因爲我只會需要兩個團隊,但這兩個團隊不屬於任何一個事件。

event_teams 
    - integer:event_id 
    - integer:team_id 
    - boolean:is_home 

有沒有更清晰的語義方式來使這些關聯在活動記錄中?還是其中一種解決方案是最佳選擇?

謝謝

回答

2

您的解決方案很好,因爲同一個事件屬於兩個團隊。當多個模型可事件化時,多態關聯是適用的。

+0

感謝您的確認! – ethyreal 2010-03-28 22:25:28

相關問題