0

同じモデルへの 2 つの参照を持つモデルがある場合、どのように設定すればよいですか? 私が今持っているのは

class Game < ActiveRecord::Base
    has_one :home_team_stats, :class_name => 'Stats'
    has_one :away_team_stats, :class_name => 'Stats'

class Stats < ActiveRecord::Base
    belongs_to :game

ただし、Activerecord がクエリを実行すると、game_id が x の最初の Stats エントリが検索されます。したがって、home_stats が最新のエントリである場合、home_stats と away_stats の両方が home_stats エントリに設定されます。away_game の場合は、両方ともそれに設定されます。

Stats Load (0.3ms)  SELECT "stats".* FROM "stats" WHERE "stats"."game_id" = 1 LIMIT 1

私の理解では、これを回避する方法は、関係を has_one から belongs_to などに変更することです。統計はゲームに属し、ゲームにはホーム チームとアウェイ チームの統計があると口語的に言うので、それは本質的に間違っているように感じます。これを設定するより良い方法はありますか?

編集:それを理解しました。

ゲームモデルを次のように変更しました。

has_one :home_team_stats, :class_name => 'Stats', :foreign_key => "id", :primary_key => "home_team_stats_id"
has_one :away_team_stats, :class_name => 'Stats', :foreign_key => "id", :primary_key => "away_team_stats_id"
4

1 に答える 1

2

問題は、Stats のインスタンスをホームかアウェイかを識別する方法がないことです。(あなたが示したこと)

潜在的な修正は、home列をに導入しstats、関係を次のように変更することです。

class Game < ActiveRecord::Base
  has_one :home_team_stats, :class_name => 'Stats', :conditions => {:home => true}
  has_one :away_team_stats, :class_name => 'Stats', :conditions => {:home => false}
于 2013-02-05T02:05:01.563 に答える