2016-02-10 2 views
1

У меня есть две таблицы, Teams и Games. Я пытаюсь настроить ассоциации для этих таблиц, но сталкиваясь с некоторыми проблемами. Вот моя Game модель с его ассоциациями:has_many связь с несколькими внешними ключами в ту же таблицу

# Game Model 

class Game < ActiveRecord::Base 
    belongs_to :home_team, class_name: "Team" 
    belongs_to :away_team, class_name: "Team" 
    belongs_to :winning_team, class_name: "Team" 
end 

I может быть overthinking это, но я не уверен, как настроить мой Team модель для have_many игр.

С в моей модели Team простой has_many :games, мои тесты возвращает следующую ошибку:

Team Associations should have many games 
    Failure/Error: it { should have_many(:games) } 
     Expected Team to have a has_many association called games (Game does not have a team_id foreign key.) 

Я вижу, что он ищет team_id для Game, и так как нет никаких ошибок team_id его. Но в моей таблице Game у меня есть три внешних ключа, ссылающихся на один класс. Так мне нужно было бы создать has_many для каждого home_team, away_team и winning_team?

+0

вопроса о проектировании баз данных никогда не должен включать ОРМ или прикладное программное обеспечение в нем. Это не правильный инструмент для проектирования баз данных. КОГДА-ЛИБО! Реальный дизайн базы данных будет иметь три таблицы: «Игра с подробностями об игре», команда с подробностями о команде и TeamGAme в качестве таблицы соединений для многих и многих ассоциаций. – HLGEM

+0

@HLGEM это не похоже на вопрос о дизайне базы данных, база данных уже настроена функционально. Вопрос в том, можете ли вы залить все три ассоциации вместе с одной ссылкой has_many или нет. Кроме того, почему вы предлагаете таблицу соединений? Подробные сведения об игре в этом случае - две команды, которые играли, похоже, что таблица соединений будет излишней. Может, я что-то упустил? Я думаю, что дизайн базы данных правильный. – GoGoCarl

+0

@GoGoCarl Спасибо, я начал сомневаться в моих методах. И да, я ищу способ обработать has_many с одной строкой или как три отдельные строки has_many. – mikeymurph77

ответ

2

Вам нужно что-то вроде:

class Team < ActiveRecord::Base 
    has_many :home_games, class_name: 'Game', foreign_key: 'home_team_id' 
    has_many :away_games, class_name: 'Game', foreign_key: 'away_team_id' 

    # This seems like a separate thing to me... 
    has_many :winning_games, class_name: 'Game', foreign_key: 'winning_team_id' 

    # Do not include winning games, since it would already be included 
    def games 
    self.home_games.to_a + self.away_games.to_a 
    end 

end 
+0

Спасибо, это отлично работает, и мои тесты проходят. Очень признателен. – mikeymurph77

Смежные вопросы