2014-09-03 2 views
1

У меня есть некоторые сомнения относительно дизайна базы данных для приложения rails, которое используется для записи статистики матчей по футболу (футболу).Несколько has_many через ассоциации между одними и теми же моделями

У меня есть три модели:

  • Match
  • игрок
  • Цель

, которые имеют следующие соотношения:

  • Каждый матч может иметь много голов, забитые Игроки хозяев поля
  • Каждого матча может иметь много голов, забитых игроками команды посетителей
  • Каждого игрока (из дома и команда посетителя) может забить много голов в матче

Вот структура моих моделей:

class Match < ActiveRecord::Base 
    has_many :home_goals, 
     class_name: 'Goal', 
     foreign_key: 'home_match_id' 
    has_many :home_scorers, 
     class_name: 'Player', 
     foreign_key: 'home_scorer_id', 
     through: :home_goals 

    has_many :visitor_goals, 
     class_name: 'Goal', 
     foreign_key: 'visitor_match_id' 
    has_many :visitor_scorers, 
     class_name: 'Player', 
     foreign_key: 'visitor_scorer_id', 
     through: :visitor_goals 

    ... 

end 


class Goal < ActiveRecord::Base 
    belongs_to :home_match, 
     class: 'Match', 
     foreign_key: 'home_match_id' 
    belongs_to :visitor_match, 
     class: 'Match', 
     foreign_key: 'visitor_match_id' 

    belongs_to :player 
end 


class Player < ActiveRecord::Base 
    has_many :goals 
    has_many :home_matches, 
     class_name: 'Match', 
     foreign_key: 'home_scorer_id', 
     through: :goals 

    has_many :visitor_matches, 
     class_name: 'Match', 
     foreign_key: 'visitor_scorer_id', 
     through: :goals 

    ... 

end 
  1. Могу ли я сделать вложенными "has_many_through" отношения на этом пути?

  2. Необычное, что игрок может набрать больше одного мяча в матче. Из-за этого, возможно, что с одним и тем же игроком существует более одного мяча. Возможно ли это или может привести к ошибкам?

  3. Моя конечная цель состоит в том, чтобы иметь возможность подсчитывать, сколько голов забил игрок во всех матчах, получить список домашних игроков, домашних целей, игроков посетителя и целей гостя за каждый матч. Есть ли лучший способ организовать БД?

+0

Почему бы вам не попробовать все это в 'rails console'? – Surya

ответ

0

Похоже, вам нужно что-то вроде Полиморфной ассоциации. В основном это позволяет модели иметь несколько belongs_to рельсам документы имеет хорошую информацию о нем: http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

с этим, цели могут принадлежать к обоим игрокам и спички и может позволить игрокам has_many и спички has_many быть намного более чистым.