2016-10-02 4 views
1

私はレールに働いていると私は、この苦境を持っている:複数のモデルを介してデータを取得するRails?

チーム - >プレイヤー - >マッチ - >ゲーム - > PlayerStatsなどで

、チーム:

マイ団体のセットアップは、このようなものです選手には試合があり、試合には最高5つの試合があり、試合の各選手には統計があります。

しかし、もし私が選手の総得点を得たいのであれば、私はすべての試合をループしなければならなくて、各試合ごとに各試合を見て、各試合の統計を引く必要があります。

ページを読み込んだときに複数の統計情報に対してこれを行うと、これも課税されますか?おそらく、問題にアプローチするより良い方法はありますか?

+0

今すぐに見て素晴らしい時間があるとしてあなたのスキーマが総目標クエリが同じである

player.player_stats.sum(:goal_count) 

になりますプレーヤーのために、この

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) 

のようになりますし、データベースビュー、集計、およびウィンドウについて学びます。ここでは良いスタートです:http://brewhouse.io/2016/08/04/sql-in-rails.html – coreyward

答えて

1

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

ああ!それははるかに理にかなっています。ありがとうございました!私がここにいる間、データベースのすべてのデータが私によって入力されます(サイト上のユーザーは作成しません)。 seed.rbを使用してデータベースをシードするだけのベスト・ベットですか?それとも、データを直接変更する方がいいですか? – Fianite

+0

チーム全体の統計情報を取得したい場合は、次のようにActiveRecordクエリを組み合わせることができます: 'players = Player.top.first(5); stats = PlayerStat.where(player_id:players) '。これにより、N + 1のクエリのパフォーマンスが低下するのを回避できます。 – coreyward

+0

@Fianiteはい。 seeds.rbは問題ありません。 – dnsh

関連する問題