2016-10-02 4 views
1

Я работаю с рельсами и у меня есть это затруднительное положение:Рельсы, получающие данные через несколько моделей?

Мои ассоциации установки, как это:

Team -> Игрок -> Match -> Игра -> PlayerStats

как в, команды есть игроки, игроки имеют матчи, спички - лучшие из пяти и имеют игры, и каждый игрок в игре имеет статистику.

Однако, если я хочу получить цели игроков целиком, мне нужно будет пройти все свои матчи и каждый матч посмотреть на каждую игру и вытащить их статистику из каждой игры.

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

+0

Сейчас прекрасное время, чтобы изучить и узнать о просмотрах, агрегатах и ​​окнах базы данных. Вот хороший старт: http://brewhouse.io/2016/08/04/sql-in-rails.html – coreyward

ответ

1

Ваша схема должна выглядеть следующим образом

Team(id, name) 
Player(id, name) 
Match(id, name) 
Game(id, name, match_id) 
PlayerStat(id, match_id, team_id, player_id, game_id, goal_count) 

Для игроков всего голов запрос будет

player.player_stats.sum(:goal_count) 

, который так же, как

PlayerStat.where(player_id: 2).sum(:goal_count) 
+0

Ах! Это имеет смысл. Спасибо! Пока я здесь, все данные в базе данных будут введены мной (ни одна из них не создана пользователями на сайте). Я предпочитаю только посеять базу данных с помощью seed.rb или есть лучший способ для меня непосредственно изменить данные? – Fianite

+0

Обратите внимание, что если вы хотите получить статистику для всей команды, вы можете комбинировать запросы ActiveRecord следующим образом: 'players = Player.top.first (5); stats = PlayerStat.where (player_id: игроки) '. Это позволит избежать плохо выполняющих N + 1 запросов. – coreyward

+0

@Fianite Да. seeds.rb будет в порядке. – dnsh