Можно ли иметь несколько ActiveRecord `assign_to`, указывающих на один и тот же класс? - PullRequest
2 голосов
/ 27 марта 2010

При связывании спортивного события с двумя командами сначала это имело смысл:

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

Есть ли более чистый и семантический способ включения этих ассоциаций в активную запись? или одно из этих решений лучший выбор?

Спасибо

1 Ответ

2 голосов
/ 28 марта 2010

Ваше решение в порядке, так как одно и то же событие принадлежит двум командам. Полиморфные ассоциации применимы, когда несколько моделей являются равномерными.

...