Можно ли иметь несколько Activerecord `принадлежать_TO`, указывающий на один и тот же класс?
-
22-09-2019 - |
Вопрос
Связывая спортивное мероприятие с двумя командами, сначала это, казалось, имело смысл:
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
Есть ли более чистый более семантический способ для создания этих ассоциаций в активной записи? Или одно из этих решений является лучшим выбором?
Спасибо
Решение
Ваше решение в порядке, так как одно и то же событие принадлежит двум командам. Полиморфные ассоциации применимы, когда несколько моделей могут быть предприняты.