2016-04-13 12 views
0

Ich möchte ein Modell für ein Baseballteam haben, das viele Spieler und Statistiken über das Team hat.Tabelle zu zwei Modellen gehören?

Ich möchte auch ein Modell für Spieler, die die gleiche Statistik haben.

Wie kann ich die Statik-Tabelle sowohl dem Baseball-Modell als auch dem Spieler-Modell zuordnen?

+0

Wenn Sie mit "... die gleichen Statistiken" meinen, dass Sie Daten duplizieren möchten, tun Sie es nicht. Der ganze Sinn einer relationalen Datenbank besteht darin, redundante Daten zu vermeiden. Sie speichern die Daten einmal und beziehen sich bei Bedarf darauf. Ich bin nicht sicher, warum Sie glauben, dass Sie eine Statistiktabelle teilen müssen, wenn Teamdaten und Spielerdaten getrennt werden können (und sollten). – MarsAtomic

+0

@MarsAtomic Ich meine, dass sie beide ihre eigenen Einträge in der Statistiktabelle wünschen. Sowohl der Spieler als auch das Team hätten durchschnittliche Durchschläge, RBIs, Home Runs usw. – user5478032

+1

Manchmal denken Sie, dass Sie eine Frage stellen, wenn Sie wirklich eine andere fragen. Teamstatistiken sind nichts weiter als aggregierte Daten von den Spielern, die in diesem Team sind. Daher können sie direkt über eine SQL-Abfrage berechnet werden. 'select sum (homer) von player_stats wo team_id = 2 und player_status =" active "' Diese Abfrage liefert dir die HR Summe von welchem ​​Team auch ID 2 ist. – MarsAtomic

Antwort

1

Sie können polymorphe Assoziation verwenden. Sie können here

Statistik Modell

class Statistic < ActiveRecord::Base 
    belongs_to :statisticable, polymorphic: true 
end 

Baseball Modell

class Baseball < ActiveRecord::Base 
    has_many :statistic, as: :statisticable 
end 

Spieler Modell

class Player < ActiveRecord::Base 
    has_many :statistic, as: :statisticable 
end 

Ihre Migrationsdatei für Statistik Modell beziehen

class CreateStatistic < ActiveRecord::Migration 
    def change 
    create_table :statistics do |t| 
     t.string :strength 
     t.string :defensive 
     t.string :attack 
     t.references :statisticable, polymorphic: true, index: true 
     t.timestamps null: false 
    end 

    end 
end 
Verwandte Themen