Frage

Bei der Verknüpfung eines Sportereignisses mit zwei Teams schien dies zunächst sinnvoll zu sein:

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

teams
  - integer:id
  - string:name

Ich bin jedoch beunruhigt darüber, wie ich das im aktiven Datensatzmodell verknüpfen würde:

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

Ist das die beste Lösung?

In einer Antwort auf a Ähnliche Frage Ich wurde auf eine einzelne Tabelle vererbt und fand später später polymorphe Assoziationen. Keiner von beiden schien zu dieser Vereinigung zu passen. Vielleicht schaue ich mir das falsch an, aber ich sehe keine Notwendigkeit, ein Team in Heim- und Auswärtsmannschaften zu unterteilen, da die Auszeichnung nur in dem Spiel ist, wo das Spiel gespielt wird. Wenn ich mit einer einzelnen Tischvererbung gehen würde, möchte ich nicht, dass jedes Team zu einem Ereignis gehört, also würde dies funktionieren?

# 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

Das schien einfach zu viel Arbeit für das, was ich erreichen wollte.

Ich dachte auch über einen Has_Many durch Association nach, aber das scheint zwei zu sein, da ich immer nur zwei Teams brauchen werde, aber diese beiden Teams gehören zu keinem Ereignis.

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

Gibt es einen saubereren semantischeren Weg, um diese Assoziationen in aktiver Aufzeichnung zu machen? Oder ist eine dieser Lösungen die beste Wahl?

Vielen Dank

War es hilfreich?

Lösung

Ihre Lösung ist in Ordnung, da das gleiche Ereignis zwei Teams gehört. Die polymorphen Assoziationen sind anwendbar, wenn mehrere Modelle ereignisfähig sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top