スポーツ イベントを 2 つのチームに関連付ける場合、最初はこれが理にかなっているように見えました。
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
それが最善の解決策ですか?
同様の質問への回答で、単一テーブルの継承を指摘され、その後、ポリモーフィックな関連付けが見つかりました。どちらもこの関連付けに適合しないようでした。おそらく私はこれを間違って見ていますが、チームをホームチームとアウェイチームにサブクラス化する必要はないと思います。区別はゲームがプレイされる場所だけにあるからです。単一のテーブル継承を使用した場合、各チームがイベントに所属したくないので、これは機能しますか?
# 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 スルー アソシエーションについても考えましたが、必要なチームは 2 つだけなので 2 つのように思えますが、これらの 2 つのチームはどのイベントにも属していません。
event_teams
- integer:event_id
- integer:team_id
- boolean:is_home
アクティブなレコードでこれらの関連付けを作成するための、より明確なセマンティックな方法はありますか? または、これらのソリューションのいずれかが最良の選択ですか?
ありがとう