При связывании спортивного события с двумя командами сначала это имело смысл:
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 через ассоциацию, но это кажется двумя, так как мне когда-нибудь понадобятся только две команды, но эти две команды не принадлежат ни к одному событию.
event_teams
- integer:event_id
- integer:team_id
- boolean:is_home
Есть ли более чистый и семантический способ включения этих ассоциаций в активную запись? или одно из этих решений лучший выбор?
Спасибо