2

スポーツ イベントを 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

アクティブなレコードでこれらの関連付けを作成するための、より明確なセマンティックな方法はありますか? または、これらのソリューションのいずれかが最良の選択ですか?

ありがとう

4

1 に答える 1

2

同じイベントが 2 つのチームに属しているため、ソリューションは問題ありません。ポリモーフィックな関連付けは、複数のモデルがイベント可能である場合に適用できます。

于 2010-03-27T21:31:06.927 に答える