2

En reliant un événement sportif à deux équipes, au début, cela semblait logique:Est-il correct d'avoir plusieurs ActiveRecord `belongs_to` pointant vers la même classe?

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

teams 
    - integer:id 
    - string:name 

Cependant, je suis préoccupé par la façon dont je rattacherais que dans le modèle d'enregistrement actif:

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 

Est-ce la meilleure solution?

Dans une réponse à un similar question j'ai été pointé vers l'héritage de table unique, puis plus tard trouvé des associations polymorphes. Aucun d'entre eux ne semblait correspondre à cette association. Peut-être que je regarde ce problème, mais je ne vois pas la nécessité de sous-classer une équipe dans les équipes à domicile et à l'extérieur puisque la distinction est seulement là où le jeu est joué. Si je devais aller avec l'héritage d'une table unique, je ne voudrais pas que chaque équipe appartienne à un événement, alors est-ce que cela fonctionnerait?

# 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 

Cela semblait être trop de travail pour ce que je voulais réaliser.

Je pensais aussi à un has_many à travers l'association, mais cela semble deux choses car je n'aurai besoin que de deux équipes, mais ces deux équipes n'appartiennent à aucun événement. Y a-t-il un moyen plus sémantique pour rendre ces associations actives? ou l'une de ces solutions est-elle le meilleur choix?

Merci

Répondre

2

Votre solution est bien que le même événement appartient à deux équipes. Les associations polymorphes sont applicables lorsque plusieurs modèles sont eventables.

+0

merci pour la confirmation! – ethyreal

Questions connexes